Windows多線程連接埠掃描

來源:互聯網
上載者:User

標籤:

還不是很瞭解多線程,先簡單運用下。

  1 /*  2 2015.5    HT  3 多線程連接埠掃描  4   5 netstat -an  6   7 */  8   9 #include <iostream> 10 #include <process.h> 11 #include <winsock2.h> 12 #pragma comment(lib,"ws2_32.lib") 13 using namespace std; 14  15 // 線程傳遞的連接埠參數 16 typedef struct  17 { 18     unsigned int min_port; 19     unsigned int max_port; 20 }Port; 21 Port *lpPort = new Port; 22 // 線程數 23 int Thread_NUM; 24 // 互斥量 25 HANDLE hMutex; 26  27 DWORD WINAPI scan(LPVOID lpParameter) 28 { 29     // 獲得參數 30     Port* port = (Port*)lpParameter; 31     SOCKET sockfd = NULL; 32     SOCKADDR_IN sin; 33     sin.sin_family = AF_INET; 34     sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); 35  36     for (unsigned int i = port->min_port; i <= port->max_port; ++i) 37     { 38         if (sockfd == NULL) 39         { 40             // 建立通訊端 41             sockfd = socket(AF_INET, SOCK_STREAM, 0); 42             if (sockfd == INVALID_SOCKET) 43             { 44                 cout << "建立socket失敗!" << endl; 45                 return 0; 46             } 47         } 48         sin.sin_port = htons(i); 49         // 串連伺服器 50         int ret = connect(sockfd, (sockaddr *)&sin, sizeof(sockaddr)); 51         // 請求一個互斥量的訪問權 52         WaitForSingleObject(hMutex, INFINITE); 53         if (ret == SOCKET_ERROR) 54         { 55             cout << "Port: " << i << "    not open !" << endl; 56         } 57         else 58         { 59             cout << "Port: " << i << "    open !" << endl; 60             closesocket(sockfd); 61             sockfd = NULL; 62         } 63         // 釋放一個互斥量的訪問權 64         ReleaseMutex(hMutex); 65     } 66  67     return 0; 68 } 69  70 int main() 71 { 72     WSADATA wsaData; 73     if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) 74     { 75         cout << "找不到 WinSock dll!" << endl; 76         return 0; 77     } 78  79     hMutex = CreateMutex(NULL, FALSE, NULL); 80  81     cout << "輸入開始端點口,結束連接埠號碼: " ; 82     cin >> lpPort->min_port >> lpPort->max_port; 83     cout << "輸入線程數(小於200): "; 84     cin >> Thread_NUM; 85     HANDLE handle[200]; 86     int Scan_Len = (lpPort->max_port - lpPort->min_port) / Thread_NUM; 87      88     for (int i = 0; i < Thread_NUM; ++i) 89     { 90         Port *NewPort = new Port; 91         NewPort->min_port = lpPort->min_port + Scan_Len * i; 92         if (i < (Thread_NUM - 1)) 93             NewPort->max_port = NewPort->min_port + Scan_Len - 1; 94         else 95         { 96             NewPort->max_port = lpPort->max_port; 97             handle[i] = (HANDLE)CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)scan, NewPort, 0, NULL); 98             break; 99         }100         handle[i] = (HANDLE)CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)scan, NewPort, 0, NULL);101     }102     WaitForMultipleObjects(Thread_NUM, handle, TRUE, INFINITE);103 104     CloseHandle(hMutex);105     return 0;106 }

 

Windows多線程連接埠掃描

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.