我正在使用RHEL6计算机,并尝试通过RAW套接字与Windows XP计算机通信。
当我在RHEL计算机上收到特定的框架时,使用RAW套接字的Python 2脚本处理该框架并更改以下字段,然后将其发送到Windows计算机:
正如我在Wireshark中看到的那样,数据包到达了我的Windows XP计算机,但是由于需要该数据包的软件没有反应,因此它从未到达应用程序层。
这就是我创建发送数据包的方式:
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套接字数据包吗?
答案 0 :(得分:0)
您需要在OS上启用混杂模式,否则它将在数据包到达您的应用程序之前将其杀死。看起来像这样:
sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)
sniffer.bind((host, 0))
if os.name == “nt”:
sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
以下是有关如何在linux和Windows上使用python启用它的教程:https://codingsec.net/2016/05/packet-sniffing-windows-linux-using-python/