我正在尝试编写一个程序来模拟一些虚拟网络接口。我的程序在Linux PC上运行,表示 A ,连接到路由器,表示为 R ,并且 A 有一个带有IPv4地址的物理网络接口eth0
,例如192.168.1.2
。我的程序可以通过DHCP从路由器获取多个不同的IPv4地址,比如192.168.1.3
,192.168.1.4
,...(我通过编写一些虚拟MAC地址完成了这部分)。接下来我需要做的是,当另一台物理PC,表示 B ,它也连接到路由器 R < / strong>,尝试与我的程序获取的其中一个IPv4地址(不是分配给物理接口的eth0
, A )进行通信比方说,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网络编程中读到了“Datalink Access”,但信息并不十分详细。) 谢谢, 汤姆
答案 0 :(得分:0)
根据我对您的要求的理解,您可以使用子接口。您可以将eth0拆分为多个接口,例如eth0:1 eth0:2等。然后,您可以为每个接口分配IP并将其用作常规接口。您可以在这些子接口上运行run tcpdump / wireshark并根据需要捕获数据包。