当只有一台计算机时,如何模拟连接局域网的两台计算机?

问题描述:

我想测试连接LAN的两台计算机之间的网络应用程序。当只有一台计算机时,如何模拟连接局域网的两台计算机?

这些计算机将具有不同的IP地址。

我只有一台电脑。

如何模拟两台与LAN连接的计算机,并且只有一台计算机时具有不同的IP地址?

平台:Linux。

语言:C

+2

我想到的第一个选择是在您的计算机上运行两个虚拟机。 – 2013-05-11 12:06:50

+1

@ Chiel92 - 一个就足够了。那么你有一台真正的机器和一台虚拟机。总计 - 2个IP。 – enhzflep 2013-05-11 12:16:12

这一切都取决于你想测试。如果你不关心一些低级别的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可能是有用的。