我有一个文件,其中包含二进制形式的原始 IP 数据包。文件中的数据包含完整的 IP 标头、TCP\UDP 标头和数据。我想使用任何语言(最好是 python)来读取这个文件并将数据转储到行上。
在 Linux 中,我知道您可以直接写入某些设备(echo "DATA" > /dev/device_handle)。使用 python 在 /dev/eth1 上打开会达到相同的效果(即我可以做 echo "DATA" > /dev/eth1)
我有一个文件,其中包含二进制形式的原始 IP 数据包。文件中的数据包含完整的 IP 标头、TCP\UDP 标头和数据。我想使用任何语言(最好是 python)来读取这个文件并将数据转储到行上。
在 Linux 中,我知道您可以直接写入某些设备(echo "DATA" > /dev/device_handle)。使用 python 在 /dev/eth1 上打开会达到相同的效果(即我可以做 echo "DATA" > /dev/eth1)
不; 没有/dev/eth1
设备节点——网络设备与终端和硬盘驱动器等字符/块设备位于不同的命名空间中。您必须创建一个AF_PACKET
套接字来发送原始 IP 数据包。
就像是:
#!/usr/bin/env python
import socket
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
s.bind(("ethX", 0))
blocksize = 100;
with open('filename.txt') as fh:
while True:
block = fh.read(blocksize)
if block == "": break #EOF
s.send(block)
应该可以,但是没有测试过。
ethX
需要更改为您的界面(例如eth1
, eth2
,wlan1
等)blocksize
. 一次 100 字节应该没问题,您可以考虑增加,但我会保持在 1500 字节以太网 PDU 以下。while
用一些处理替换循环,但send
仍然是一样的。while
循环是不够的。