如果只有一台计算机,如何模拟连接到LAN的两台计算机?

时间:2013-05-11 12:03:18

标签: c linux networking network-programming

我希望在LAN连接的两台计算机之间测试网络应用程序。

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

我只有一台电脑。

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

  

平台:Linux。

     

语言:C

2 个答案:

答案 0 :(得分:2)

这完全取决于你想要测试的内容。如果您不关心某些低级别的TCP细微差别,我认为您不需要像其他建议那样进入虚拟化。

请注意,套接字由端口号,协议(TCP与UDP)和网络接口标识。 绑定套接字时,您可以指定它应该侦听哪个特定的网络接口。但是如果你没有指定它(通常就是这种情况),套接字就会被绑定到给定端口上的所有接口。 因此,在您的计算机上安装两个网络接口就足够了 - 例如一个在LAN卡上,另一个在WLAN卡上,或者只是环回接口(localhost又名127.0.0.1)注意你每个接口上都有不同的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上创建一个虚拟网络接口,但我还没有这样做过,所以你需要自己去谷歌。

答案 1 :(得分:1)

可能类似于Graphical Network Simulator可能有用。