【问题标题】:ARP message how to get IPARP报文如何获取IP
【发布时间】:2013-01-10 20:03:43
【问题描述】:

我需要知道 ARP 回复的发件人的 IP 地址。我尝试使用 recvfrom,但无法从中获取 IP 地址。谢谢您的帮助。

我有一些子进程,每个子进程都向 IP 地址发送 ARP 请求。问题是响应会到达所有子进程,因为套接字是原始的,所以我需要以某种方式知道响应到达的是哪个子进程。我试过了

struct sockaddr_ll linkLayerAddr;
char buf[32];
int sockaddr_len=sizeof(linkLayerAddr);
memset(&linkLayerAddr,0,sizeof(linkLayerAddr));
fcntl(sock,F_SETFL,O_NONBLOCK);
nanosleep(&time1,NULL);

if(recvfrom(sock,buf,sizeof(buf),0,(struct sockaddr*)&linkLayerAddr,&sockaddr_len)==-1){

info.status=0; 
}//se primeste raspunsul
else{
info.status=1;

}

我等待 800000 纳秒的回复,我想知道消息来自哪个 IP。使用 recvfrom 我只能获取 MAC 地址。

【问题讨论】:

  • 提供一些你测试过的代码。准确地说,您打算从数据包结构中获取 IP,还是从有效负载本身获取 IP?
  • 我可能是错的,但我不认为这是可能的,因为 ARP 数据包只对请求者和响应进行编码。您可以自己缓存一个 ARP 表(或探测系统 ARP 表)并查找响应数据包源的 MAC 地址(在以太网标头中,而不是 ARP 有效负载中)。
  • linux ARP recvfrom information 的可能重复项

标签: c linux arp


【解决方案1】:

埃米尔,我已经回答了同样的问题。

点击这里:

Same question

如果你不喜欢这个答案,让我们讨论它,但避免使用相同的主题提出新问题

【讨论】:

  • 感谢您的回答。我不明白如何剖析 Arp 包。我应该使用 ip 邻居访问 ARP 缓存吗?
  • @Emil Grigore 不,这是您收到的数据包中的字节数。
猜你喜欢
  • 2012-04-10
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 2014-08-26
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
相关资源
最近更新 更多