2013-10-07 119 views
0

我想編寫一個程序來模擬一些虛擬網絡接口。我的程序在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網絡編程,但是信息不是很詳細。) 謝謝, 湯姆

回答

0

從我的你的需求理解,你可以使用子接口。您可以將eth0拆分爲多個接口,如eth0:1 eth0:2等。然後,您可以爲每個接口分配IP,並將它們用作常規接口。您可以在這些子接口上運行tcpdump/wireshark並根據需要捕獲數據包。

+0

嗨喬,謝謝你的回覆。我需要以編程方式處理數據包,也就是說,我需要創建一個套接字並將其綁定到每個虛擬接口。如果我使用子接口,我可以做到這一點嗎? – user2616158

+0

是的。絕對。處理虛擬接口就像處理常規接口一樣。從內核的角度看,它們看起來都一樣。您可以獲取子接口的ifindex並與之綁定。 – joe