【发布时间】:2011-08-26 11:12:31
【问题描述】:
我正在寻找创建一个客户端/服务器应用程序,我可以使用它来将网络数据包分成两半,通过单独的 udp 连接隧道传输数据包的每一半(因为每个 udp 连接将通过不同的 wifi 链接)和然后在另一端重新组装拆分的数据包。除了拆分数据包外,每半个数据包还必须有一个 ID 和序列号,以便它们可以正确重组。
基本上我正在尝试做类似于MLPPP 的事情
我希望使用 python 和 TUN/TAP 网络驱动程序来执行此操作。 我发现了以下我认为可能对这个项目有帮助的 Python 代码示例和模块。
Python tun/tap
- http://www.secdev.org/projects/tuntap_udp/files/tunproxy.py
- http://twistedmatrix.com/trac/browser/trunk/twisted/pair/tuntap.py
- http://pastebin.com/gMB8zUfj
Python 原始数据包操作
- http://libdnet.sourceforge.net/
- http://pypi.python.org/pypi/pyip/
- http://code.google.com/p/python-packet/
我的问题是可以使用 python 完成必要的数据包修改吗?有什么可能的方法来解决这个问题?我可以使用上面的模块来做到这一点还是有更好的解决方案?由于我不是经验丰富的程序员,我正在寻找一些可以引导我朝着正确方向前进的输入。欢迎提供任何代码示例或其他链接。
【问题讨论】:
-
我没有给你的答案——但我会说,如果你要更改用户空间中的每个数据包,我认为你会对性能感到非常失望。在吞吐量和延迟方面。我用 scapy 做了类似的事情(在处理 python 用户空间中的每个数据包时类似),性能很糟糕。 FWIW
-
使用不同的编程语言会有所不同,还是只有使用自定义内核模块才能获得可接受的性能?
-
我知道的还不够多——但我已经阅读了其他一些关于从内核到用户空间的上下文切换成本的研究,我只能想象你是否必须为每一包,你都会感受到。这并不是说你不能让它足够快地满足你的需求,只是要有现实的期望。
标签: python networking packet tap