我正在开发一种嵌入式系统,必须通过10Base-T以太网与外界进行通信。我已经构建了服务网页所需的所有功能,包括ARP,IP,TCP,ICMP(ping),HTTP和部分FTP。现在,我需要构建其余的代码,这将允许我充当客户端。从服务器的角度来看,上述所有协议都运行了好几个月。
现在,我需要构建这些协议的一半客户端,以从其他服务器请求数据。步骤1是ARP用于远程服务器的硬件地址。据我了解,由于服务器在另一个网络上,我的网关应该响应其MAC地址,以便我知道将发往该IP的所有数据包传递到我的网关。这是问题所在:
我的设备(192.168.1.251,在子网掩码255.255.255.0上)没有从我的网关(192.168.1.1)或网络外的任何计算机获得ARP响应。但是,我的设备(X.251)确实从我的笔记本电脑(192.168.1.100)获得了ARP响应,该笔记本电脑位于同一路由器下。
我确定我的基本ARP以太网帧结构是正确的,因为我每次都会正确回复ARP请求。不同之处在于OPERATION字段,取决于REQUEST或REPLY,为1或2。
这是我的设备(192.168.1.251)对网关(192.168.1.1)的请求,它没有响应:
FF FF FF FF FF FF< - 目标MAC - 广播(也尝试过0x00)
00 04 A3 7F C1 57< - 来源MAC - 我的设备
08 06< - ARP
00 01< - ethernet
08 00< - IP
06< - 6字节MAC地址
04< - 4字节IP地址
00 01< - request(2 =回复)
00 04 A3 7F C1 57< - sender MAC - mine
C0 A8 01 FB< - sender IP - mine = 192.168.1.251
<00> 00 00 00 00 00 00&lt; - 目标MAC - 未知,请求原因C0 A8 01 01&lt; - 目标IP - 网关= 192.168.1.1
<00> 00 00 00 00 ... 00 00 00&lt; - 用于填充的18组00的预告片现在,我的设备(192.168.1.251)对我的笔记本电脑(192.168.1.100)提出了几乎相同的请求,得到了有效的回复:
FF FF FF FF FF FF&lt; - 目标MAC - 广播(也尝试过0x00)
00 04 A3 7F C1 57&lt; - 来源MAC - 我的设备
08 06&lt; - ARP
00 01&lt; - ethernet
08 00&lt; - IP
06&lt; - 6字节MAC地址
04&lt; - 4字节IP地址
00 01&lt; - request(2 =回复)
00 04 A3 7F C1 57&lt; - sender MAC - mine
C0 A8 01 FB&lt; - sender IP - mine = 192.168.1.251
<00> 00 00 00 00 00 00&lt; - 目标MAC - 未知,请求原因C0 A8 01 64&lt; - target IP - laptop = 192.168.1.100
<00> 00 00 00 00 ... 00 00 00&lt; - 用于填充的18组00的预告片附注可能重要也可能不重要:
答案 0 :(得分:0)
如果我猜对了,你将ARP请求发布到你的笔记本上,不允许回答ARP请求。通常,每个设备只为自己回答。尝试为您的路由器输入目标IP 192.168.1.1。这应该有用。
顺便说一句,您无法获得子网外的任何设备的MAC地址。每个包都需要通过目标ip地址发送到网关mac地址。
答案 1 :(得分:0)
我会尝试以下列方式解决此问题:
使用像scapy这样的工具,从您的笔记本电脑发出请求网关MAC的ARP请求,然后将其发送到广播MAC。看一下请求是否被回复。
然后,使用scapy在笔记本电脑上创建ARP请求,但将源MAC设置为设备的MAC地址,并向网关MAC的广播MAC发送请求。这基本上模拟了设备在笔记本电脑上的发送。如果您可以暂时将笔记本电脑的Mac更改为设备的MAC,则应在笔记本电脑上获得回复。
如果上述步骤正常,那么您将模拟笔记本电脑上设备的确切行为,并且实际设备也能正常工作。