【发布时间】:2013-10-07 02:42:33
【问题描述】:
我正在尝试编写一个程序来模拟一些虚拟网络接口。我的程序在 Linux PC 上运行,表示为 A,连接到路由器,表示为 R,以及 >A 有一个物理网络接口 eth0,其 IPv4 地址为 192.168.1.2。我的程序可以通过 DHCP 从路由器获取多个不同的 IPv4 地址,例如,192.168.1.3、192.168.1.4、...(我通过编造一些虚拟 MAC 地址来完成这一部分)。接下来我需要做的是,当另一台物理PC,表示为B,它也连接到路由器R,尝试与我的程序获得的 IPv4 地址之一(不是分配给 A 的物理接口 eth0 的地址)进行通信,比如说, 192.168.1.3 它应该在 B 看来 192.168.1.3 是一个“真正的”网络接口。例如,如果B ping 192.168.1.3,它应该能够收到来自192.168.1.3 的响应(即使数据包实际上是通过A 的物理网络接口eht0)。此外,我的程序应该能够在接收到整个数据包的虚拟接口上提取 IP 数据包。
换句话说,我的程序想要完成的是像 VirutalBox 或 VMWare Player 这样的虚拟机中的“桥接网络”。
谁能告诉我应该从什么开始?我应该使用 TAP 吗?有没有我可以使用的现有库?或者我应该为我的目的创建一个链接层套接字? (我在 Richard Stevens 的 Unix Network Programming 中阅读了“数据链路访问”,但信息不是很详细。) 谢谢, 汤姆
【问题讨论】:
标签: networking virtual tap