我正在编写NAT的实现,并且需要使用原始套接字。我已经习惯了Twisted体系结构,并且喜欢它如何处理并发连接。
进入Twisted协议的数据被操作,NAT,制表,并发送到原始套接字。进入原始套接字的数据被操纵,查找,NAT,并定向到适当的协议实例。
单个原始套接字是否足够?如果大量连接同时进入该怎么办?没有扭曲处理,或者在无连接协议中扭曲几乎没有优势。如果有优势,任何人都可以将我引导到原始插座扭曲的例子
答案 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) - 你只需要从消防水管中喝水。