所以我今天早上在C++上制作了一个端口扫描器,它似乎能够正常工作,只是有一个令人讨厌的问题 - 每当我用它在网络上扫描IP时,它都需要10每个端口-20秒。提高端口扫描器的性能
好像connect()方法是这么长时间。
现在除了多线程之外,我敢肯定会加快这个过程但不会太多,我怎么能让这个更快?这里是扫描的代码段:
for (i = 0; i < a_size(port_no); i++)
{
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
target.sin_family = AF_INET;
target.sin_port = htons(port_no[i]);
target.sin_addr.s_addr = inet_addr(argv[1]);
if (connect(sock, (SOCKADDR *)&target, sizeof(target)) != SOCKET_ERROR)
cout << "Port: " << port_no[i] << " - open" << endl;
else
cout << "Port: " << port_no[i] << " - closed" << endl;
closesocket(sock);
}
如果你需要更多的让我知道。
另外,我正在使用winsock2.h文件。是不是因为这么慢?
可能会有某种超时丢失。 – Drise 2013-05-06 22:11:11
如果你想减少等待连接的时间,使它成为一个非阻塞套接字并在'connect'后调用'select'。 – 2013-05-06 22:11:54
@CaptainObvlious,我其实也觉得我在某处在线阅读。今天晚些时候,当我有机会的时候,我会再试一次。谢谢! – user1324674 2013-05-06 22:12:59