我正在使用Python制作用于数字广播的模拟器。 radio 通过RS-232端口和以太网端口中的每个RF进行中继,一对 radio 构成无缝管道。因此,该模拟器将成对使用,它们之间的管道可以模拟RF链路,从而允许用户使用物理接口(interface),虚拟接口(interface)或隧道连接到每一端。

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

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

关键的困难似乎是,这涉及整个IP地址以下的以太网接口(interface),位于以太网协议(protocol)本身的级别上:如果只有几个端口,则解决方案将相对简单。还是我错过了令人眼花obvious乱的东西?

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

最佳答案

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

我的方法是使用Dummynet,这是一种真正了不起的多功能工具。不幸的是,Dummynet Windows和Linux端口的维护不完善,这意味着我将运行* BSD。

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

而且,如果我担心尺寸,可以使用picoBSD或nanoBSD为我的模拟器制作一个微型的量身定制的系统。

10-01 18:16
查看更多