【问题标题】:Is it possible to use raw sockets with Twisted (Python)是否可以在 Twisted (Python) 中使用原始套接字
【发布时间】:2012-10-31 00:45:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: python sockets networking twisted raw-sockets


    【解决方案1】:

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

    twisted.pair中有处理IP级协议数据的模块,但不是全部都有效; in particular, tuntap support does not work.

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

    【讨论】:

    • 您能否详细说明最后一部分?更具体地说,我的问题是我想在地址 0.0.0.0 上发送 UDP 并在 255.255.255.255 上侦听(与 DHCP 相关)。我想使用twisted,因为它必须模拟许多客户端,而不仅仅是一个DHCP客户端。
    • 我很乐意,但您能提出更具体的问题吗?如果您已经阅读了这些接口的文档,哪些部分不清楚?
    【解决方案2】:

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

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

    【讨论】:

    • 确实是twisted.pair 没有看到很多工作,但我认为它得到了维护,因为我自己在过去一年中花了很多时间在它上面。 :) 这是一个具有挑战性的领域,到目前为止还没有任何可发布的结果 - 但我希望 Twisted 14.0 能得到一些改进!
    • 我很抱歉 - 无意冒犯! :p 我上次查看twisted.pair 大概是12.0 左右,所以我必须重新熟悉自己。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2014-05-18
    • 2010-11-10
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多