2011-06-06 96 views
4

我想将hping3转换成hping6。 hping3使用Pcap库来接收IPv4数据包。但我需要接收IPv6数据包。我可以使用pcap库来接收ipv6数据包吗?

+0

你绝对可以使用的libpcap捕捉到的IPv6数据包(如Wireshark的和帮会绝对捕捉它们)。从未直接使用过libpcap,我无法为您提供任何帮助,但它绝对有可能。 – 2011-06-06 19:14:53

回答

6

这是可能的。 libpcap能够捕捉线上的任何东西。

+0

+1,这包括不是IPv4的东西(如直接位于以太网帧之上的ARP)。在使用ETHERTYPE_IP的IPv4 PCAP代码中,只需使用ETHERTYPE_IPV6,并使用适当的头结构。 – Flexo 2011-06-07 22:08:57

2

示例使用ETHERTYPE_IPV6

static u_int16_t ether_packet(u_char *args, const struct pcap_pkthdr *pkthdr, co 
nst u_char *p) { 
    struct ether_header *eptr = (struct ether_header*)p; 

    assert(pkthdr->caplen <= pkthdr->len); 

    assert(pkthdr->caplen >= sizeof(struct ether_header)); 

    return eptr->ether_type; 
} 


// This is the callback. assumes ethernet frame. 
static void pcap_callback(u_char *args,const struct pcap_pkthdr* pkthdr,const u_ 
char* p) 
{ 
    const u_int16_t type = ether_packet(args, pkthdr, p); 
    switch (ntohs(type)) { 
    case ETHERTYPE_IP: 
    // handle IPv4 
    break; 
    case ETHERTYPE_IPV6: 
    // handle v6 
    break; 
    } 
} 
相关问题