我在文件中有一个服务器地址列表,如下所示:
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脚本但是我的期望很慢
答案 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
何时完成(成功或不成功)。创建所有连接所需的时间应该由建立时间最长的连接限制。 (添加错误处理等等。)