2013-05-11 97 views
1

我想測試連接LAN的兩臺計算機之間的網絡應用程序。當只有一臺計算機時,如何模擬連接局域網的兩臺計算機?

這些計算機將具有不同的IP地址。

我只有一臺電腦。

如何模擬兩臺與LAN連接的計算機,並且只有一臺計算機時具有不同的IP地址?

平臺:Linux。

語言:C

+2

我想到的第一個選擇是在您的計算機上運行兩個虛擬機。 – 2013-05-11 12:06:50

+1

@ Chiel92 - 一個就足夠了。那麼你有一臺真正的機器和一臺虛擬機。總計 - 2個IP。 – enhzflep 2013-05-11 12:16:12

回答

2

這一切都取決於你想測試。如果你不關心一些低級別的TCP細微差別,我認爲你不需要像其他人在這裏所說的那樣進入虛擬化。

請注意,套接字由端口號,協議(TCP vs UDP)和網絡接口標識。 當你綁定一個套接字時,你可以指定它應該在哪個特定的網絡接口上監聽。但是如果你不指定它(通常是這種情況),套接字就會綁定到給定端口上的所有接口。 因此,您的計算機上應具有兩個網絡接口 - 例如一個位於LAN卡上,另一個位於WLAN卡上,或者簡單地稱爲回送接口(localhost又名127.0.0.1)。請注意,每個IP上有不同的IP這些接口。 你只需要確保你的套接字綁定到特定的IP地址。您的程序的每個實例綁定到不同的IP。

假設您的LAN網卡上的IP爲192.168.1.101。你可以使用下面的代碼來聽只有這個特定的接口:

/* ... */ 
int ssocket; 
struct sockaddr_in address; 

bzero((char *)&address, sizeof(address)); 
address.sin_family=AF_INET; 
address.sin_port=htons(12345); 
inet_aton("192.168.1.101", &address.sin_addr.s_addr); 
ssocket = socket(PF_INET, SOCK_STREAM, 0); 
bind(ssocket, (struct sockaddr *) &address, sizeof(address)); 
/* ... and so on ... */ 

注意,該代碼將偵聽192.168.1.101:12345,但不能在127.0.0.1:123456。您可以在應用程序中配置偵聽IP地址。然後,只需使用localhost作爲一個實例,並使用LAN地址作爲應用程序的其他實例。我很確定你也可以在linux上創建一個虛擬網絡接口,但我從來沒有這樣做過,所以你需要爲你自己的谷歌。