⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s.cpp

📁 C语言写的简单的端口扫描程序
💻 CPP
字号:
#include<stdio.h>
#include<winsock2.h>
#include<time.h>
#pragma comment(lib,"ws2_32.lib")
int threadn=0;
char *ip;
TIMEVAL timeout;
FD_SET mask;
int totalport=0;
int nport=1;

DWORD WINAPI Threads(LPVOID lp)
{

	int port=*(DWORD*)lp;
	SOCKET mysock;
	struct sockaddr_in myaddr;
	
	u_long v=1;	
	
	mysock=socket(AF_INET,SOCK_STREAM,0);
	if(mysock==INVALID_SOCKET)
	{
		printf("musock error\n");
		InterlockedExchangeAdd((long *)&threadn,-1);
		return 0;
	}
	if(mysock==INVALID_SOCKET) return 0;
	myaddr.sin_addr.S_un.S_addr=inet_addr(ip);
	myaddr.sin_family=AF_INET;	


	ioctlsocket(mysock,FIONBIO,&v);	
	myaddr.sin_port=htons(port);

	connect(mysock,(struct sockaddr *)&myaddr,sizeof(myaddr));
	
	//timeout.tv_sec=0;
	//timeout.tv_usec=1;
	FD_ZERO(&mask);
	FD_SET(mysock,&mask);
	v=select(0,NULL,&mask,NULL,&timeout);
	
	if(v==0||v==-1)
	{
		closesocket(mysock);
		Sleep(10);
		InterlockedExchangeAdd((long *)&threadn,-1);
		return 0;
	}
	else
	{
		shutdown(mysock,0); 		
		printf("Thread:%d Scan  %s\t%d \t Open\n",threadn,ip,port);
		closesocket(mysock);
		Sleep(10);
		InterlockedExchangeAdd((long *)&threadn,-1);
	}
	return 0;

}

int main(int argc, char * argv[])
{
	WSAData ws;
	//int nport;
	int maxthread;	
	int minp,maxp;
	
	if(argc!=5)
	{
		printf("\nUse:    s ip Startprot Endport thread\n");
		printf("Example:s 127.0.0.1 2 9999 512\n");
		return 0;
	}
	ip=argv[1];
	minp=atoi(argv[2]);
	maxp=atoi(argv[3]);
	maxthread=(atoi(argv[4])-1>999)?999:atoi(argv[4])-1;
	if(WSAStartup(MAKEWORD(1,1),&ws)!=0)
	{
		printf("Winsocket Startup Failed!/n");
		WSACleanup();
		return 0;
	}
	
	timeout.tv_usec=0;
	if(maxthread>500)timeout.tv_sec=2;
    	else timeout.tv_sec=1;
	totalport=maxp-minp;
	printf("[*]begaining scan\n");
	for(int port=minp;port<=maxp;port++,nport++,threadn++)
	{
		Sleep(1);
		
		while(threadn>maxthread)
		{	
			Sleep(10);
		}
		CreateThread(NULL,0,Threads,&port,0,NULL);
		printf("[*]Finished\t%d%s\r",nport*100/(totalport+1),"%");
				
	}
	printf("\n[*]Waiting threads end...\n");
	Sleep(1000);
	while(threadn>0)
	{
		Sleep(1);
		printf("[*]%d threads \r",threadn);
		
	}
	printf("\n[*]Scan over\n");
	WSACleanup();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -