简单的端口扫描程序源代码 作 者:miyagi #include #include #include #pragma comment(lib,"ws2_32.lib") //define global variable long MaxThread=100; HANDLE hSemaphore; long PreviousCount=0; int TargetIP; DWORD WINAPI portscan(LPVOID lp); int main(int argc, char **argv) { HANDLE hThread=NULL; WSADATA wsd; int i; DWORD dwThreadID; if(argc!=4) { printf("\n%s,scan port by miyagi\n" "usage:%s \n",argv[0],argv[0]); return 1; } __try { //load winsock library if(WSAStartup(MAKEWORD(2,2),&wsd)!=0) { printf("Failed to load winsock library!Error %d\n",GetLastError()); __leave; } //create semaphore hSemaphore=CreateSemaphore(NULL,MaxThread,MaxThread,NULL); if(hSemaphore==NULL) { printf("Failed to create semaphore!Error %d\n",GetLastError()); __leave; } //get target IP and target port range TargetIP=inet_addr(argv[1]); int TargetHost=ntohl(TargetIP); int StartPort=atoi(argv[2]); int StopPort=atoi(argv[3]); //create thread to scan for(i=StartPort;i<=StopPort;i++) { hThread=CreateThread(NULL, 0, portscan, (LPVOID)i , 0, &dwThreadID); if(hThread==NULL) { printf("Faile to create thread!Error %d\n",GetLastError()); break; } Sleep(10); CloseHandle(hThread); WaitForSingleObject(hSemaphore, INFINITE); } //wait for all thread done while(1) { WaitForSingleObject(hSemaphore, INFINITE); if(!ReleaseSemaphore(hSemaphore, 1, &PreviousCount)) { printf("\nmain() ReleaseSemaphore failed:%d",GetLastError()); Sleep(5000); break; }if(PreviousCount=(MaxThread-1)) { printf("\n^o^ scan end!\n"); break; } Sleep(500); } }//try end __finally { CloseHandle(hSemaphore); WSACleanup(); } return 0; } DWORD WINAPI portscan(LPVOID lp) { struct sockaddr_in server; SOCKET s=INVALID_SOCKET; int iPort=(int)lp; s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(s==INVALID_SOCKET) { printf("Faile to create socket!Error %d",GetLastError()); ExitProcess(1); } server.sin_family=AF_INET; server.sin_addr.S_un.S_addr=TargetIP; server.sin_port=htons(iPort); __try { //connect to target if(connect(s, (struct sockaddr *)&server, sizeof(server))!=0) __leave; else printf(" port TCP %d is open!\n",ntohs(server.sin_port)); }//try end __finally { Sleep(500); if(!ReleaseSemaphore(hSemaphore,1, NULL)) printf("\nThread ReleaseSemaphore Failed:%d",GetLastError()); closesocket(s); } return 0; 本文来源:https://www.wddqw.com/doc/bcd9a23ea26925c52cc5bfaf.html