我想測試連接LAN
的兩臺計算機之間的網絡應用程序。當只有一臺計算機時,如何模擬連接局域網的兩臺計算機?
這些計算機將具有不同的IP地址。
我只有一臺電腦。
如何模擬兩臺與LAN
連接的計算機,並且只有一臺計算機時具有不同的IP地址?
平臺:Linux。
語言:C
我想測試連接LAN
的兩臺計算機之間的網絡應用程序。當只有一臺計算機時,如何模擬連接局域網的兩臺計算機?
這些計算機將具有不同的IP地址。
我只有一臺電腦。
如何模擬兩臺與LAN
連接的計算機,並且只有一臺計算機時具有不同的IP地址?
平臺:Linux。
語言:C
這一切都取決於你想測試。如果你不關心一些低級別的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上創建一個虛擬網絡接口,但我從來沒有這樣做過,所以你需要爲你自己的谷歌。
可能類似於Graphical Network Simulator可能是有用的。
我想到的第一個選擇是在您的計算機上運行兩個虛擬機。 – 2013-05-11 12:06:50
@ Chiel92 - 一個就足夠了。那麼你有一臺真正的機器和一臺虛擬機。總計 - 2個IP。 – enhzflep 2013-05-11 12:16:12