2017-07-13 1 views
0

Ich habe versucht, Netzwerkverkehr mit dem RAW-Socket AF_PACKET zu schnüffeln. Ich bin in der Lage, alle IP/ARP-Pakete zu bekommen, aber ich kann überhaupt keine IPv6-Pakete bekommen. Was muss ich tun, um IPv6-Verkehr zu erhalten?AF_PACKET-Socket empfängt keine IPv6-Pakete

unsigned char buffer[65536]; 
    int sock_raw = socket(AF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) ; 

    if (sock_raw < 0) 
    { 
    perror("socket error!"); 
    return 1; 
    } 

    while (1) 
    { 
     struct sockaddr saddr; 
     int saddr_size, data_size; 

     data_size = recvfrom(sock_raw, buffer, 65536, 0, &saddr, (socklen_t *)&saddr_size); 

     if (data_size >= 0) 
     { 
     ProcessPacket(buffer, data_size); 
     } 
    } 
+2

Es hängt möglicherweise davon ab, welches Betriebssystem Sie verwenden. Windows? Linux? FreeBSD? FreeDOS? – Neil

+0

Ist dies ein geschalteter Ethernet-Netzwerk? Dazu müssten Sie die Port-Spiegelung einrichten. Wenn es sich um ein Wi-Fi-Netzwerk handelt, müssen Sie sich im Monitor- oder Promiscuous-Modus befinden. Andernfalls sehen Sie nur Broadcast, z. ARP oder Traffic, der nur für Ihren Host bestimmt ist. –

+0

Ist die Schnittstelle im Promiscuous-Modus? – Cheatah

Antwort

0

Mein schlechtes. IPv6 haben ein anderes Ethernet-Protokoll: ETH_P_IPV6 statt ETH_P_IP, und ich habe nur nach den ETH_P_IP-Paketen gesucht! Das Hinzufügen des Falles für ETH_P_IPv6 hat das Problem gelöst!

+0

Ja, IPv6 verwendet ARP nicht und es gibt keine Broadcasts. –