【问题标题】:How to implement virtual network interface如何实现虚拟网络接口
【发布时间】:2013-10-07 02:42:33
【问题描述】:

我正在尝试编写一个程序来模拟一些虚拟网络接口。我的程序在 Linux PC 上运行,表示为 A,连接到路由器,表示为 R,以及 >A 有一个物理网络接口 eth0,其 IPv4 地址为 192.168.1.2。我的程序可以通过 DHCP 从路由器获取多个不同的 IPv4 地址,例如,192.168.1.3192.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


    【解决方案1】:

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

    【讨论】:

    • 嗨乔,谢谢你的回复。我需要以编程方式处理数据包,也就是说,我需要创建一个套接字并将其绑定到每个虚拟接口。如果我使用子接口,我可以这样做吗?
    • 是的。绝对地。处理虚拟接口与处理常规接口完全一样。从内核的角度来看,它们看起来都一样。您可以获取子接口的ifindex并与之绑定。
    猜你喜欢
    • 2021-09-16
    • 2010-09-08
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2012-07-11
    相关资源
    最近更新 更多