简单的端口扫描程序源代码

时间:2022-07-13 10:15:17 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
简单的端口扫描程序源代码





者: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