3

我正在开发一个必须通过 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 <-- 以太网

08 00 <-- 知识产权

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 <-- 源 MAC - 我的设备

08 06 <-- ARP

00 01 <-- 以太网

08 00 <-- 知识产权

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
  • 我的 X.251 设备 IP 在设备中是硬编码的。我看不到在路由器配置应用程序中设置此 IP 和我设备的 MAC 之间的关系的方法。所有其他功能似乎都可以将我的设备用作服务器,所以我认为这不是问题。
  • 我尝试将远程服务器(google = 173.194.43.33)的 ARP 请求直接发送到服务器的 IP 和我的网关的 IP(希望它会意识到它需要成为代理。)
  • 我试过把头撞在桌子上,可悲的是,这有点帮助。
4

2 回答 2

0

如果我猜对了,您将您的 ARP 请求发布到您的笔记本上,这不允许回答该 ARP 请求。通常每个设备都只为自己回答。尝试为您的路由器输入目标 ip 192.168.1.1。那应该行得通。

顺便说一句,您无法获取子网之外的任何设备的 MAC 地址。每个包都需要发送到带有目标 IP 地址的网关 MAC 地址。

于 2012-09-14T20:45:29.263 回答
0

我会尝试通过以下方式解决此问题:

使用 scapy 之类的工具,从您的笔记本电脑制作一个请求网关 MAC 的 ARP 请求,并将其发送到广播 MAC。查看请求是否得到回复。

然后,使用 scapy 在您的笔记本电脑上创建一个 ARP 请求,但将源 MAC 设置为您设备的 MAC 地址,并向广播 MAC 发送网关 MAC 请求。这实质上是在模拟您的设备在笔记本电脑上的发送。如果您可以将笔记本电脑的 mac 临时更改为设备的 MAC,您应该会在笔记本电脑上收到回复。

如果上述步骤正常工作,那么您将在笔记本电脑上模拟设备的确切行为,并且实际设备也将正常工作。

于 2012-09-14T21:14:50.277 回答