首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python进行网络接口模拟?

用Python进行网络接口模拟?
EN

Stack Overflow用户
提问于 2012-06-28 04:16:11
回答 2查看 2.5K关注 0票数 6

我正在用Python做一个数字收音机的模拟器。无线电通过射频中继一个RS-232端口和一个以太网端口,两个无线电构成无缝管道。因此,模拟器将成对使用,它们之间的管道模拟RF链路,允许用户使用物理接口、虚拟接口或隧道连接到每一端。

对于RF串行端口,我使用PySerial和虚拟串行端口来使模拟器尽可能通用:我可以将模拟器连接到物理串行端口、网络插座或另一个本地程序。除了用于在每个不同操作系统上创建虚拟串行端口的工具之外,这种方法完全是跨平台的。

我希望模拟器能够通过虚拟接口与本地程序联网,通过共享网络接口与远程程序联网,并通过专用于模拟器的本地物理接口与远程程序联网。但到目前为止,我还没有找到一种简单的方法来做到这一点。我一直在研究SLIP/PPP、TAP/DUN、pcap/SOCK_RAW和其他可能性,但我没有找到明显或通用的解决方案。

关键的困难似乎是,这涉及整个以太网接口,在IP级别以下,在以太网协议本身的级别:如果它只有几个端口,解决方案将相对简单。或者我是不是漏掉了什么显而易见的东西?

如何使用Python以与RF串行接口解决方案一样通用的方式创建和使用RF以太网接口?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-04 00:34:58

人们张贴的大量答案鼓励我跳出框框思考。

我的方法是使用Dummynet,一个真正令人惊叹和通用的工具。不幸的是,Dummynet Windows和Linux端口没有得到很好的维护,这意味着我将运行*BSD。

但这简化了事情,因为*BSD镜像也可以作为VM运行,这极大地简化了虚拟接口的处理。

如果我关心大小,我可以使用picoBSD或nanoBSD为我的模拟器定制一个小型系统。

票数 3
EN

Stack Overflow用户

发布于 2018-08-09 19:18:15

你可以使用这个Python库:rawsocketpy,它允许在第2层使用原始套接字(使用以太网II协议),=>没有IP/TCP/UDP头。

代码语言:javascript
运行
复制
#!/usr/bin/env python
from rawsocketpy import RawSocket

sock = RawSocket("wlp2s0", 0xEEFA)
sock.send("some data")
sock.send("personal data", dest="\xAA\xBB\xCC\xDD\xEE\xFF")

或服务器表单:

代码语言:javascript
运行
复制
#!/usr/bin/env python
from rawsocketpy import RawRequestHandler, RawAsyncServerCallback
import time

def callback(handler, server):
    print("Testing")
    handler.setup()
    handler.handle()
    handler.finish()

class LongTaskTest(RawRequestHandler):
    def handle(self):
        time.sleep(1)
        print(self.packet)

    def finish(self):
        print("End")

    def setup(self):
        print("Begin") 

def main():
    rs = RawAsyncServerCallback("wlp2s0", 0xEEFA, LongTaskTest, callback)
    rs.spin()

if __name__ == '__main__':
    main()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11234197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档