2012-10-31 34 views
2

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

进入Twisted协议的数据被处理,NAT,列表并发送出原始套接字。进入原始套接字的数据被操纵,查找,NAT,并被引导至适当的协议实例。

只有一个原始插座就足够了吗?如果大量的连接同时进入,会怎么样?不扭曲处理,或者在无连接协议中扭曲非常不利。如果有优势,任何人都可以指示我一个原始插座扭曲的例子

回答

3

扭曲支持无连接协议就好了。例如,参见listenUDP

twisted.pair中有处理IP级别协议数据的模块,但并非所有模块都可以使用; in particular, tuntap support does not work

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

+0

你能详细解释一下最后一部分吗?更具体地说,我的问题是我想在地址0.0.0.0上发送UDP,并在255.255.255.255上侦听(与DHCP有关)。我想使用扭曲,因为这是必须模拟许多客户端,而不仅仅是一个DHCP客户端。 – KillianDS

+0

我会很高兴,但你能说一个更具体的问题吗?如果你已经阅读过这些接口的文档,哪部分不清楚? – Glyph

0

在扭曲的源代码中挖掘一下,你会发现twisted.pair,它不再被真正维护,但是会给你大约90%的你需要做的原始套接字。

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

+0

这是真的twisted.pair没有看到很多工作,但我会争辩说,它保持了,因为我在过去的一年中,我自己花了很多小时。 :)这是一个具有挑战性的领域,迄今为止还没有任何可发布的结果 - 但我希望对Twisted 14.0有所改进! –

+0

我的歉意 - 没有进攻意图! :p上次我看twisted.pair的时间可能在12.0左右,所以我不得不重新熟悉自己。 – synthesizerpatel

相关问题