2017-07-13 83 views
0

我试图使用AF_PACKET原始套接字来嗅探网络流量。我能够获得所有IP/ARP数据包,但我根本无法获取任何IPv6数据包。我需要做什么才能获得IPv6流量?AF_PACKET套接字未收到IPv6数据包

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

这可能取决于您使用的操作系统。视窗? Linux呢? FreeBSD的? FreeDOS的? – Neil

+0

这是一个交换式以太网吗?这将需要您设置端口镜像。如果是Wi-Fi网络,则需要您处于监视或混杂模式。否则,您只会看到广播,例如ARP或专为您的主机而定的流量。 –

+0

混杂模式中的接口是什么? – Cheatah

回答

0

我的不好。 IPv6有不同的以太网协议:ETH_P_IPV6而不是ETH_P_IP,我只是在寻找ETH_P_IP数据包!为ETH_P_IPv6添加案例解决了问题!

+0

是的,IPv6不使用ARP,并且没有广播。 –