是否可以使用Twisted(Python)的原始套接字

时间:2012-10-31 00:45:56

标签: python sockets networking twisted raw-sockets

我正在编写NAT的实现,并且需要使用原始套接字。我已经习惯了Twisted体系结构,并且喜欢它如何处理并发连接。

进入Twisted协议的数据被操作,NAT,制表,并发送到原始套接字。进入原始套接字的数据被操纵,查找,NAT,并定向到适当的协议实例。

单个原始套接字是否足够?如果大量连接同时进入该怎么办?没有扭曲处理,或者在无连接协议中扭曲几乎没有优势。如果有优势,任何人都可以将我引导到原始插座扭曲的例子

2 个答案:

答案 0 :(得分:3)

Twisted支持无连接协议就好了。例如,请参阅listenUDP

twisted.pair中有用于操纵IP级协议数据的模块,但并非所有模块都有效; in particular, tuntap support does not work

我所知道的没有这个例子,但据我所知,单个原始套接字应该没问题。但是,您需要编写自己的传输,将套接字包裹在IReadDescriptor / IWriteDescriptor and using IReactorFDSet中。但是,如果你足够熟练地知道你需要原始套接字,那么这应该不会太难。

答案 1 :(得分:0)

在扭曲的源代码中挖掘,你会发现twisted.pair,它不再被维护,但是你可以获得大约90%的原始套接字。

我有一些示例代码,显示如何在BSD上使用/ dev / bpf。唯一需要注意的是它是纯粹的python,所以没有tcpdump风格的包过滤器(端口80和主机blah.com) - 你只需要从消防水管中喝水。