我正在编写NAT的实现,并且需要使用原始套接字。我已经习惯了Twisted体系结构,并且喜欢它如何处理并发连接。是否有可能使用Twisted(Python)的原始套接字
进入Twisted协议的数据被处理,NAT,列表并发送出原始套接字。进入原始套接字的数据被操纵,查找,NAT,并被引导至适当的协议实例。
只有一个原始插座就足够了吗?如果大量的连接同时进入,会怎么样?不扭曲处理,或者在无连接协议中扭曲非常不利。如果有优势,任何人都可以指示我一个原始插座扭曲的例子
我正在编写NAT的实现,并且需要使用原始套接字。我已经习惯了Twisted体系结构,并且喜欢它如何处理并发连接。是否有可能使用Twisted(Python)的原始套接字
进入Twisted协议的数据被处理,NAT,列表并发送出原始套接字。进入原始套接字的数据被操纵,查找,NAT,并被引导至适当的协议实例。
只有一个原始插座就足够了吗?如果大量的连接同时进入,会怎么样?不扭曲处理,或者在无连接协议中扭曲非常不利。如果有优势,任何人都可以指示我一个原始插座扭曲的例子
扭曲支持无连接协议就好了。例如,参见listenUDP
。
在twisted.pair
中有处理IP级别协议数据的模块,但并非所有模块都可以使用; in particular, tuntap support does not work。
我没有这方面的例子,但据我所知,单个原始套接字应该没问题。但是,您将需要编写自己的运输工具,将套筒包装在IReadDescriptor
/IWriteDescriptor
and using IReactorFDSet
中。但是,如果你足够熟练地知道你首先需要原始套接字,这应该不会太难。
在扭曲的源代码中挖掘一下,你会发现twisted.pair,它不再被真正维护,但是会给你大约90%的你需要做的原始套接字。
我有一些示例代码显示了如何在BSD上使用/ dev/bpf。唯一需要注意的是它是纯粹的python,所以没有tcpdump风格的数据包过滤器(端口80和主机blah.com) - 你只需要从消防水带中喝水。
这是真的twisted.pair没有看到很多工作,但我会争辩说,它保持了,因为我在过去的一年中,我自己花了很多小时。 :)这是一个具有挑战性的领域,迄今为止还没有任何可发布的结果 - 但我希望对Twisted 14.0有所改进! –
我的歉意 - 没有进攻意图! :p上次我看twisted.pair的时间可能在12.0左右,所以我不得不重新熟悉自己。 – synthesizerpatel
你能详细解释一下最后一部分吗?更具体地说,我的问题是我想在地址0.0.0.0上发送UDP,并在255.255.255.255上侦听(与DHCP有关)。我想使用扭曲,因为这是必须模拟许多客户端,而不仅仅是一个DHCP客户端。 – KillianDS
我会很高兴,但你能说一个更具体的问题吗?如果你已经阅读过这些接口的文档,哪部分不清楚? – Glyph