我试图使用AF_PACKET原始套接字来嗅探网络流量。我能够获取所有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);
}
}
答案 0 :(得分:0)
我的坏。 IPv6有不同的以太网协议:ETH_P_IPV6而不是ETH_P_IP,我只是在寻找ETH_P_IP数据包!为ETH_P_IPv6添加案例解决了这个问题!