用 Python 注入(inject)原始 TCP 数据包的合适方法是什么?例如,我有由十六进制数字组成的有效负载,我想将该十六进制数字序列发送到网络守护进程:这样,如果我选择发送“abcdef”,我也会在网络上看到“abcdef”。但不是“6162636566”,如以下情况:
new = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
new.connect(('127.0.0.1', 9999))
new.send('abcdef')
我可以为此目的使用 Python 的 SOCK_RAW 吗?如果是这样,您能否给我一个使用 SOCK_RAW 发送原始 TCP 数据包的示例(因为我自己没有让它工作)
谢谢!
叶凡
最佳答案
尝试 scapy ,一个强大的交互式数据包操作程序。
例子:
%> sudo scapy
>>> packet1 = IP(dst='127.0.0.1')/TCP(dport=9999)
>>> packet1.payload = 'abcdef'
>>> send(packet1)
.
Sent 1 packets.
>>> packet1.show()
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= ip
chksum= None
src= 127.0.0.1
dst= 127.0.0.1
\options\
###[ Raw ]###
load= 'abcdef'
>>>
关于python - 使用 Python 注入(inject)原始 TCP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2912123/