C AF_数据包套接字未接收IPv6数据包

C AF_数据包套接字未接收IPv6数据包,c,sockets,ipv6,C,Sockets,Ipv6,我试图使用AF_数据包原始套接字嗅探网络流量。我能够获取所有IP/ARP数据包,但我根本无法获取任何IPv6数据包。我需要做什么才能获得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;

我试图使用AF_数据包原始套接字嗅探网络流量。我能够获取所有IP/ARP数据包,但我根本无法获取任何IPv6数据包。我需要做什么才能获得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);
      }
   }
无符号字符缓冲区[65536];
int sock_raw=套接字(AF_数据包、sock_raw、htons(ETH_P_ALL));
如果(短袜未加工<0)
{
perror(“套接字错误!”);
返回1;
}
而(1)
{
结构sockaddr saddr;
int saddr_大小、数据大小;
数据大小=recvfrom(存储原始数据、缓冲区、65536、0和saddr,(存储大小*)和saddr大小);
如果(数据大小>=0)
{
ProcessPacket(缓冲区、数据大小);
}
}

我的坏习惯。IPv6有不同的以太网协议:ETH_P_IPv6而不是ETH_P_IP,我只是在寻找ETH_P_IP数据包!添加ETH_P_IPv6解决了这个问题

这可能取决于您使用的操作系统。窗户?Linux?免费的?FreeDOS?这是交换式以太网吗?这将需要您设置端口镜像。如果是Wi-Fi网络,则需要您处于监视或混杂模式。否则,您将只看到广播,例如ARP,或只为您的主机发送的流量。界面是否处于混杂模式?我使用的是Ubuntu 16.04。我可以在同一接口上看到使用tcpdump的IPv6流量,但上面的程序没有。我试图将界面设置为混乱模式,但没有成功。我的错误。IPv6有不同的以太网协议:ETH_P_IPv6而不是ETH_P_IP,我只是在寻找ETH_P_IP数据包!添加ETH_P_IPv6解决了这个问题!是的,IPv6不使用ARP,也没有广播。