【发布时间】:2012-09-08 00:46:30
【问题描述】:
我正在开发一个必须通过 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
00 04 A3 7F C1 57
08 06
00 01
08 00
06
04
00 01
00 04 A3 7F C1 57
C0 A8 01 FB
00 00 00 00 00 00
C0 A8 01 01
00 00 00 00 ..... 00 00 00
现在,我的设备 (192.168.1.251) 对我的笔记本电脑 (192.168.1.100) 的请求几乎相同,得到了有效响应:
FF FF FF FF FF FF
00 04 A3 7F C1 57
08 06
00 01
08 00
06
04
00 01
00 04 A3 7F C1 57
C0 A8 01 FB
00 00 00 00 00 00
C0 A8 01 64
00 00 00 00 ..... 00 00 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(希望它会意识到它需要成为代理。)
- 我曾尝试用头撞桌子,但遗憾的是,这有点帮助。
【问题讨论】:
-
您确定您的网络掩码吗? 192.168.0.0/16 是一个专用网络(参见 RFC 1918)。但该 ip 块的其余部分是公共 ip 范围。
-
您的笔记本电脑肯定正在向网关发送 ARP 请求并获得响应;你能捕捉这些帧并将它们与你的设备发送的帧进行比较吗?
-
@rekire:我不是 */16 - 我是 */8。即 192.168.1.1 - 192.168.1.255,网络掩码为 255.255.255.0
-
那是错误的,你计算的是那些而不是零,所以你使用子网 192.168.1.0/24。
-
@ Joseph:奇怪的是,当我的笔记本电脑将这些请求发送到网关时,它们已经填充了网关的 MAC(不是广播)。我尝试从我的设备发送并预先填充了网关的 MAC(有点失败目的)但那些也被拒绝了。我没有尝试在欺骗笔记本电脑的 IP 和 MAC 时发送它,但我不确定这是否能告诉我什么。