繁体   English   中英

使用Python注入原始TCP数据包

[英]Injecting raw TCP packets with Python

用Python注入原始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字符串感到困惑。 例如,尝试:

new.send('\x0a\x0b\x0c\x0d\x0e\x0f')

为什么不在发送之前将字符串转换为十六进制?

new = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
new.connect(('127.0.0.1', 9999))
mydata = 'abcdef'
new.send(mydata.encode('hex'))

对于原始套接字,SOCK_RAW是可行的方法。 请记住,当您使用SOCK_RAW时,您无法发送有效负载。 你也必须做头部形成。 在你做对了之后,你可能会面临操作系统的问题。 在Windows XP上执行Raw Sockets时,由于安全问题,我们遇到了一些问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM