Python TCP协议栈实现

8 投票
5 回答
8966 浏览
提问于 2025-04-15 15:08

有没有一个Python库可以实现独立的TCP协议栈?

我不能使用普通的Python socket库,因为我通过一个socket接收一串数据包(这些数据包是通过这个socket传输给我的)。当我收到一个发往特定端口的TCP SYN包时,我想接受这个连接(发送一个syn-ack),然后获取对方发送的数据(并适当地确认)。

我希望能找到一个已经写好的TCP协议栈可以使用。有什么建议吗?我之前在一个C项目中用过lwip,如果在Python中有类似的东西就太好了。

5 个回答

0

如果你已经在使用一个软件,它通过网络连接把TCP数据包转发给你,那么TCPWatch可能会帮你找到SYN数据包。SCAPY确实很棒,可以发送你想要的特定数据包,但我不太确定它能否作为代理使用。

http://hathawaymix.org/Software/TCPWatch

不过,如果你对发送端的内容没有特别的要求,可以考虑使用Twisted Conch或Paramiko来进行SSH转发。即使你不需要加密,这些工具也可以使用blowfish加密算法,它对你的电脑性能影响很小。这并不意味着你在另一端也必须使用Conch,因为SSH是一个标准协议,任何SSH软件都应该可以使用。在SSH的世界里,这通常被称为“端口转发”,人们会使用SSH终端客户端登录到SSH服务器,并设置端口转发通道。Conch和Paramiko允许你把这个功能集成到Python应用中,这样就不需要使用SSH终端客户端了。

2

看了一下 Scapy,感觉它可能可以处理这些底层的情况。我自己没有用过,所以不能确认它是否能做到你所说的那些;我只是简单浏览了一下文档。

7

你没有说明你在使用哪个平台,但如果你是在Linux上工作,我会打开一个tun/tap接口,这样可以把IP数据包送回内核,作为一个真正的网络接口,这样内核就能处理那些复杂的TCP操作了。

比如说,OpenVPN就是这么工作的——它通过UDP或TCP接收原始的IP数据包,然后通过tun/tap接口把这些数据包送回内核。

我觉得现在Windows上也有tun/tap接口,这是为OpenVPN在Windows上的移植开发的。

撰写回答