gpt4 book ai didi

c++ - 原始套接字未接收 ARP 请求

转载 作者:行者123 更新时间:2023-11-28 06:33:41 25 4
gpt4 key购买 nike

我正在尝试编写自定义数据包嗅探器。我正在学习以下教程...

http://www.binarytides.com/packet-sniffer-code-in-c-using-linux-sockets-bsd-part-2/

这样做,我无法接收 ARP 请求数据包。我确实成功地接收了所有其他数据包,包括 ICMP、IP 等...

这里是代码的概述。同样,我正在读取所有其他数据包(每个其他数据包的每个字节),但我没有读取任何 ARP。

int main()
{
int saddr_size , data_size;
struct sockaddr saddr;

unsigned char *buffer = (unsigned char *) malloc(65536); //Its Big!

if(logfile==NULL)
{
printf("Unable to create log.txt file.");
}
printf("Starting...\n");

int sock_raw = socket( AF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) ;
setsockopt(sock_raw , SOL_SOCKET , SO_BINDTODEVICE , "eth0" , strlen("eth0")+ 1 );

if(sock_raw < 0)
{
perror("Socket Error");
return 1;
}
while(1)
{
saddr_size = sizeof saddr;
//Receive a packet
data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , (socklen_t*)&saddr_size);
if(data_size <0 )
{
printf("Recvfrom error , failed to get packets\n");
return 1;
}
//Now process the packet
ProcessPacket(buffer , data_size);
}
close(sock_raw);
printf("Finished");
return 0;
}

最佳答案

作为ARP不使用IP数据包,你不能使用recvfrom,你必须使用recv

参见例如this example .

关于c++ - 原始套接字未接收 ARP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27131043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com