所以我今天早上在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