用Python进行网络接口仿真?

2024-04-16 12:44:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

关键的困难似乎是这涉及到一个完整的以太网接口,在IP层之下,在以太网协议本身的层次上:如果它只是几个端口,那么解决方案将相对简单。还是我错过了一些显而易见的东西?在

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


Tags: 方法端口用户程序远程管道物理数字
2条回答

人们发布的大量答案鼓励我跳出框框思考。在

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

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

如果我关心的是尺寸,我可以使用picoBSD或nanoBSD为我的模拟器设计一个小的定制系统。在

您可以使用这个Python库:rawsocketpy它允许在第二层使用原始套接字(使用Ethernet II协议)=>;没有IP/TCP/UDP报头。在

#!/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")

或服务器窗体:

^{pr2}$

相关问题 更多 >