2

我正在编写一个 NAT 的实现,并且需要使用原始套接字。我已经习惯了 Twisted 架构,并且喜欢它处理并发连接的方式。

进入 Twisted 协议的数据经过处理、NAT 化、制表并发送出原始套接字。进入原始套接字的数据被操纵、查找、NAT 并定向到适当的协议实例。

有一个原始套接字就足够了吗?如果同时有大量连接进来怎么办。不扭曲处理,或者扭曲在无连接协议中几乎没有优势。如果有优势,任何人都可以将我引向原始套接字扭曲示例

4

2 回答 2

3

Twisted 很好地支持无连接协议。例如,参见listenUDP

中有用于操作 IP 级协议数据的模块twisted.pair,但并非所有模块都有效;特别是,tuntap 支持不起作用

据我所知,没有这样的例子,但据我所知,一个原始套接字应该没问题。但是,您需要编写自己的传输,将套接字包装在IReadDescriptor/中IWriteDescriptor并使用IReactorFDSet. 但是,如果您足够熟练地知道首先需要原始套接字,那么这应该不会太难。

于 2012-10-31T08:02:18.767 回答
0

在扭曲的源代码中四处挖掘,您会发现twisted.pair,它不再真正维护,但为您提供了大约 90% 的原始套接字所需的内容。

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

于 2013-11-08T15:22:02.653 回答