0

我正在尝试编写一个程序来模拟一些虚拟网络接口。我的程序在 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 地址之一(不是分配给物理接口的地址)通信时eth0一个_),比方说,在B看来,192.168.1.3它应该是一个“真正的”网络接口。例如,如果B ping ,它应该能够接收到来自的响应(即使数据包实际上是通过A的物理网络接口)。此外,我的程序应该能够在接收到整个数据包的虚拟接口上提取 IP 数据包。192.168.1.3192.168.1.3192.168.1.3eht0

换句话说,我的程序想要完成的是像 VirutalBox 或 VMWare Player 这样的虚拟机中的“桥接网络”。

有人可以告诉我应该从什么开始吗?我应该使用 TAP 吗?我可以使用任何现有的库吗?或者我应该为我的目的创建一个链接层套接字?(我在 Richard Stevens 的 Unix Network Programming 中阅读了“Datalink Access”,但信息不是很详细。)谢谢,Tom

4

1 回答 1

0

根据我对您要求的理解,您可以使用子接口。您可以将 eth0 拆分为多个接口,例如 eth0:1 eth0:2 等。然后您可以为每个接口分配 IP 并将它们用作常规接口。您可以在这些子接口上运行 tcpdump/wireshark 并根据需要捕获数据包。

于 2013-10-07T13:46:32.417 回答