2011-06-06 15 views
4

私はhping3をhping6に変換しようとしています。 hping3はPcapライブラリを使用してIPv4パケットを受信します。しかし、私はIPv6パケットを受け取る必要があります。ipv6パケットを受信するためにpcapライブラリを使用できますか?

+0

あなたは間違いなく(wiresharkのようとギャングは間違いなくそれらをキャプチャ)IPv6パケットをキャプチャするためのlibpcapを使用することができます。 libpcapを直接使用したことは一度もありませんでしたが、これ以上ヘルプを提供することはできませんが、間違いなく可能です。 –

答えて

6

可能です。 libpcapはワイヤ上のものを捕まえることができます。 ETHERTYPE_IPV6を使用して

+0

+1、これにはIPv4以外のものが含まれます(ARPのように、イーサネットフレームの上に直接置かれます)。 IPv4 PCAPコードでETHERTYPE_IPを使用する場所では、代わりにETHERTYPE_IPV6を使用し、適切なヘッダー構造も使用します。 – Flexo

2

例:

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; 
    } 
}