如何在Windows环境下使用Python生成TCP/UDP包?

2024-03-29 16:03:52 发布

您现在位置:Python中文网/ 问答频道 /正文

在Linux中,我可以使用以下命令生成TCP/UDP包。在

echo "hello world" > /dev/tcp/127.0.0.1/1337
echo "hello world" > /dev/udp/127.0.0.1/31337

我一直在寻找一种类似的方法在Python中实现,但它不像Linux那么简单。在

  1. https://wiki.python.org/moin/TcpCommunication

  2. How To Generate Tcp,ip And Udp Packets In Python?

我在Windows中使用python3.5.1并尝试以下代码。在

^{pr2}$

我还执行了一个数据包捕获来查看这个数据包,并且能够看到TCP的3路握手以及FIN数据包。在

所以,我的问题是:

  1. 为什么说“你好,世界!”消息没有出现在Wireshark中(跟随TCP流)?在

当我在Linux中运行echo "hello world" > /dev/tcp/127.0.0.1/1337时,我可以看到这个消息。在

  1. 我在运行代码时也会遇到以下错误。在

我在google上搜索了这个错误,发现了类似的错误here,但代码不同。在

请告诉我代码有什么问题,以及如何修复它。在

C:\Python\Codes>tcp.py
Traceback (most recent call last):
  File "C:\Python\Codes\tcp.py", line 12, in <module>
    s.send(MESSAGE)
TypeError: a bytes-like object is required, not 'str'

C:\Python\Codes>
  1. 这是在Python中生成TCP包的最简单方法吗?在

Tags: 方法代码pydev命令echo消息hello
2条回答

而不是这样:

s.send(MESSAGE)

这个:

^{pr2}$

正如回溯所说,这是一个TypeError:bytes对象是必需的,而不是str

因此,您可以在字符串上使用.encode()来获得一个类似的bytes对象,然后使用.decode()来取回字符串。在

MESSAGE = 'Hello, World!'
encoded = str.encode(MESSAGE)     # b'Hello, World!'
decoded = encoded.decode()        # 'Hello, World!' 

在这里,这个链接,你可能会发现它很有用。Best way to convert string to bytes in Python 3?

希望有帮助。在

相关问题 更多 >