我正在开发一个嵌入式系统,必须通过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 < - source MAC - 我的设备
08 06 < - ARP
00 01 < - 以太网
08 00 < - IP
06 < - 6字节MAC地址
04 < - 4字节IP地址
00 01 < - 请求(2 =回复)
00 04 A3 7F C1 57 < - 发送者MAC - 我的
C0 A8 01 FB < - 发送方IP - 我的= 192.168.1.251
00 00 00 00 00 00 < - 目标MAC - 未知,请求原因
C0 A8 01 01 < - 目标IP - 网关= 192.168.1.1
00 00 00 00 ..... 00 00 00 < - 用于填充的18组00的预告片
现在,我的设备(192.168.1.251)几乎完全相同的请求我的笔记本电脑(192.168.1.100),它得到一个有效的响应:
FF FF FF FF FF FF < - 目标MAC - 广播(也尝试过0x00)
00 04 A3 7F C1 57 < - source MAC - 我的设备
08 06 < - ARP
00 01 < - 以太网
08 00 < - IP
06 < - 6字节MAC地址
04 < - 4字节IP地址
00 01 < - 请求(2 =回复)
00 04 A3 7F C1 57 < - 发送者MAC - 我的
C0 A8 01 FB < - 发送方IP - 我的= 192.168.1.251
00 00 00 00 00 00 < - 目标MAC - 未知,请求原因
C0 A8 01 64 < - 目标IP - 笔记本电脑= 192.168.1.100
00 00 00 00 ..... 00 00 00 < - 用于填充的18组00的预告片
附注可能重要也可能不重要:
-
我的设备和网关都显示在笔记本电脑的ARP表中 .
-
我的笔记本电脑正在运行Win7 .
-
我的网关是Linksys WRT54GL Wireless-G宽带路由器 .
-
我已通过Wireshark分析数据包以提供上述结果 .
-
我的DHCP块覆盖了X.100到X.149,所以我的笔记本电脑被路由器分配了X.100
-
我的设备IP X.251在设备中进行了硬编码 . 我认为没有办法在路由器配置应用程序中设置此IP与我的设备的MAC之间的关系 . 所有其他功能似乎与我的设备作为服务器,所以我认为这不是一个问题 .
-
我尝试将远程服务器的ARP请求(google = 173.194.43.33)直接发送到服务器's IP and to my gateway'的IP(希望它能够实现它需要成为代理 . )
-
我试着把头撞在 table 上,遗憾的是,它帮了一下 .
2 回答
如果我猜对了,你将ARP请求发布到你的笔记本上,不允许回答ARP请求 . 通常,每个设备只为自己回答 . 尝试为您的路由器输入目标IP 192.168.1.1 . 这应该工作 .
顺便说一句,您无法获得子网外的任何设备的MAC地址 . 每个包都需要通过目标ip地址发送到网关mac地址 .
我会尝试以下列方式解决此问题:
使用像scapy这样的工具,从您的笔记本电脑发出请求网关MAC的ARP请求,并将其发送到广播MAC . 看看请求是否被回复 .
然后,使用scapy在笔记本电脑上创建ARP请求,但将源MAC设置为设备的MAC地址,并向网关的MAC发送请求到广播MAC . 这基本上模拟了设备在笔记本电脑上的发送 . 如果您可以暂时将笔记本电脑的Mac更改为设备的MAC,则应获得回复在你的笔记本电脑
如果上述步骤正常,那么您将模拟设备在笔记本电脑上的确切行为,并且实际设备也能正常工作 .