我想編寫一個程序來模擬一些虛擬網絡接口。我的程序在Linux PC上運行,表示一個,連接到路由器,表示[R,並一個有一個物理網絡接口eth0
IPv4地址,也就是說,192.168.1.2
。我的程序可以通過DHCP從路由器獲得多個不同的IPv4地址,例如192.168.1.3
,192.168.1.4
,...(我已經通過組成一些虛擬MAC地址完成了這部分)。我下一步需要做的是,當另一個物理PC,表示乙,也連接到路由器[R,試圖與通過我的程序獲得的IPv4地址中的一個(而不是溝通一個分配給該物理接口,eth0
,的甲),比方說,它192.168.1.3
應該出現乙即192.168.1.3
是「真正的」網絡接口。例如,如果乙平192.168.1.3
,它應該能夠從192.168.1.3
接收響應(甚至想到文實際穿過甲的物理網絡接口eht0
)。另外,我的程序應該能夠在接收整個數據包的虛擬接口上提取IP數據包。如何實現虛擬網絡接口
換句話說,我的程序想要完成的就像虛擬機中的「橋接網絡」,比如VirutalBox或VMWare Player。
有人可以告訴我我應該開始嗎?我應該使用TAP嗎?有沒有我可以使用的現有庫?或者我應該爲我的目的創建一個鏈接層套接字? (我讀「數據鏈接訪問」在理查德·史蒂文斯的Unix網絡編程,但是信息不是很詳細。) 謝謝, 湯姆
嗨喬,謝謝你的回覆。我需要以編程方式處理數據包,也就是說,我需要創建一個套接字並將其綁定到每個虛擬接口。如果我使用子接口,我可以做到這一點嗎? – user2616158
是的。絕對。處理虛擬接口就像處理常規接口一樣。從內核的角度看,它們看起來都一樣。您可以獲取子接口的ifindex並與之綁定。 – joe