脚本快速创建到多个服务器的多个套接字连接

时间:2016-09-21 11:33:54

标签: java python shell tcp network-programming

我在文件中有一个服务器地址列表,如下所示:

192.168.1.100
192.168.1.101
192.168.1.102
...
192.168.1.200

我想编写一个程序,它创建从一个PC客户端到所有这些服务器的多个套接字连接(使用相同的源IP,源端口和目标端口),以使我的调制解调器的NAT表充满。

有人能建议我最有效的方法吗?因为如果我有一个7K服务器IP地址的列表,我希望套接字连接的数量应该快速增加到7k,例如,5分钟后(我只是想模拟TCP攻击)。我写了一个python脚本但是我的期望很慢

1 个答案:

答案 0 :(得分:0)

您应该能够以非阻塞方式发出7K连接,然后等待它们。假设它们都成功了,所有它们的等待时间将重叠。这应该会导致整体延迟小得多。

换句话说,尝试这样的事情:

for (i = 0; i < 7000; ++i) {
  // Create socket
  sock_array[i] = socket(PF_INET, SOCK_STREAM, 0);
  // Set socket non-blocking
  flags = fcntl(sock_array[i], F_GETFL, 0);
  fcntl(sock_array[i], F_SETFL, flags | O_NONBLOCK);
  // Do the connect
  connect(sock_array[i], &sock_addr[i], sizeof sock_addr[i]);
}
for (i = 0; i < 7000; ++i) {
  // Find out if connect completed.
  getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len);
  // Assuming err == 0, your connect to i-th host is done
}

实际上,在第一个循环期间,您可以将每个套接字添加到fd_set并使用select来确定每个connect何时完成(成功或不成功)。创建所有连接所需的时间应该由建立时间最长的连接限制。 (添加错误处理等等。)