【发布时间】:2018-12-27 14:22:05
【问题描述】:
我正在使用 RHEL6 计算机并尝试通过 RAW 套接字与 Windows XP 计算机通信。
当我在 RHEL 计算机上收到特定帧时,使用 RAW 套接字的 Python 2 脚本会处理该帧并更改以下字段,然后再将其发送到 Windows 计算机:
- 目标 MAC
- 目标 IP
- IP ID
- 校验和
数据包到达我的 Windows XP 计算机,因为我在 Wireshark 中看到了数据包,但它从未到达应用层,因为需要数据包的软件没有反应。
这就是我创建发送数据包的方式:
import socket, binascii, optparse
s=socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(3))
s.bind(('eth1',0))
while True:
result = s.recv(65535)
if binascii.hexlify(result[30:34]).decode() == "<WANTED FRAME IP>":
result2 = "<DEST_MAC>".decode("hex") + result[6:18] + "<IP_ID>".decode("hex") + result[20:24] + "<CHECKSUM>".decode("hex") + result[26:30] + "<DEST_IP>".decode("hex") + result[34:]
s.send(result2)
当我尝试使用“经典”套接字时,目标软件正确接收数据包,但这不是我想要的行为,因为我必须使用 RAW 套接字来发送它们。
我尝试使用相同的代码发送其他简单的 UDP 数据包,结果我得到了相同的行为,数据包在 Wireshark 上正确看到,但从未到达我的 Windows XP 上的应用程序层。
知道为什么我的 RAW 套接字数据包没有被目标正确处理吗?
【问题讨论】:
-
如果您的应用程序需要特定端口上的 TCP 或 UDP 数据报,则原始套接字将无法工作。
标签: python windows-xp wireshark rhel raw-sockets