Могу ли я использовать библиотеку pcap для получения пакетов ipv6?

Я пытаюсь преобразовать hping3 в hping6. hping3 использует библиотеку Pcap для приема пакетов IPv4. Но мне нужно получать пакеты IPv6.


person Adi    schedule 06.06.2011    source источник
comment
Вы определенно можете использовать libpcap для захвата пакетов ipv6 (поскольку wireshark и банда определенно их захватывают). Поскольку я никогда не использовал libpcap напрямую, я не могу предложить вам больше помощи, но это определенно возможно.   -  person Mark Drago    schedule 06.06.2011


Ответы (2)


Это возможно. libpcap может поймать что угодно на проводе.

person Jille Timmermans    schedule 06.06.2011
comment
+1, это включает в себя вещи, которые не являются IPv4 (например, ARP, который находится непосредственно поверх фреймов Ethernet). Там, где в коде IPv4 PCAP вы использовали бы ETHERTYPE_IP, вместо этого вы просто используете ETHERTYPE_IPV6 с соответствующими структурами заголовков. - person Flexo; 08.06.2011

Пример использования 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;
  }
}
person Flexo    schedule 07.06.2011