www.pudn.com > port_scanner.zip > DPPS.C


#include  
#include  
#include  
 
int intThreadNum=0; 
int intTimeOut; 
FILE *fp; 
struct THREADINFO 
{	char strHost[20]; 
	int intCurPort; 
}; 
DWORD doCheck(LPVOID pParam) 
{ 
	SOCKET sockfd; 
	SOCKADDR_IN addr; 
	TIMEVAL timeout; 
	FD_SET	mask; 
	u_long value; 
	struct THREADINFO* thdCur=(struct THREADINFO*)pParam; 
 
	value=wherey(); 
	printf("Scan %s:%d\n",thdCur->strHost,thdCur->intCurPort); 
	gotoxy(1,value); 
	sockfd = socket(AF_INET, SOCK_STREAM, 0); 
	if(sockfd==INVALID_SOCKET) 
	{	printf("Socket error!\n"); 
		intThreadNum--; 
		return(0); 
	} 
	value=1; 
	ioctlsocket(sockfd,FIONBIO,&value); 
	addr.sin_family = AF_INET; 
    addr.sin_port = htons(thdCur->intCurPort); 
    addr.sin_addr.s_addr = inet_addr(thdCur->strHost); 
	connect(sockfd,(struct sockaddr *) &addr, sizeof(addr)); 
 
	timeout.tv_sec=intTimeOut; 
	timeout.tv_usec=0; 
	FD_ZERO(&mask); 
	FD_SET(sockfd,&mask); 
	value=select(sockfd+1,NULL,&mask,NULL,&timeout); 
	if(value==0 || value==-1) 
	{	closesocket(sockfd); 
		intThreadNum--; 
		return(0); 
	} 
	printf("Found %s:%d           \n",thdCur->strHost,thdCur->intCurPort); 
	fprintf(fp,"%s:%d\n",thdCur->strHost,thdCur->intCurPort); 
	fflush(fp); 
	intThreadNum--; 
	closesocket(sockfd); 
	return(1); 
} 
 
int main(int argc, char *argv[]) 
{ 
	char *p; 
	u_long	startIP,endIP; 
	WSADATA wsaData; 
	IN_ADDR	serverIP; 
	DWORD dwThreadID; 
	struct THREADINFO thdINFO[300]; 
	int i,j,intMAXThread,startPort,endPort,intPort[100],intPortCount=-1; 
 
	printf("Dotpot Port Scanner Ver 0.92(Test Version,Not contain ping fuction)\nPowered by Dotpot Workstudio,2001. Copyleft,No rights reserved.\nPlease visit Armament Shop(http://arm.533.net) for last version.\n\n"); 
	if(argc<3 || argc>5) 
	{	printf("Usage:  %s [endIP]  [thread] [timeout]\nNotes:  [thread] must be a integer between 5 to 300,default is 60.\n\t[timeout] must be a integer between 1 to 4,default is 1s.\n\tAll arguments(if in use) must be in order.\n\tAll available results will append to DPPS.TXT.\n  eg.:  %s 127.0.0.1 1-65535 100\n\t%s 127.0.0.1 21,23,25,80,135,3389\n\t%s 192.168.0.1-192.168.10.254 1-65535\n\t%s 192.168.0.1-192.168.10.1 21,23,25,79,80,135\n", 
			argv[0],argv[0],argv[0],argv[0],argv[0]); 
		return(1); 
	} 
 
	if(strchr(argv[1],'-')) 
	{for(p=argv[1];p;p++) 
		if(*p=='-') 
		{ 
			*p++='\0'; 
			endIP=ntohl(inet_addr(p)); 
			break; 
		} 
	} 
	else	endIP=ntohl(inet_addr(argv[1])); 
	startIP=ntohl(inet_addr(argv[1])); 
	if((startIP==INADDR_NONE)&&(endIP==INADDR_NONE)) 
	{	printf("IP address Error!\n"); 
		return(2); 
	} 
	if(startIP>endIP) 
	{	i=startIP; 
		startIP=endIP; 
		endIP=i; 
	} 
 
 
	p=argv[2]; 
	if(strstr(argv[2],"-")) 
	{	startPort=atoi(argv[2]); 
		for(;*p;) 
			if(*(p++)=='-')break; 
		endPort=atoi(p); 
		if(startPort>endPort) 
		{	j=startPort; 
			startPort=endPort; 
			endPort=startPort; 
		} 
		if(startPort<1 || endPort>65535) 
		{	printf("Port Error!\n"); 
			return(3); 
		} 
 
	} 
	else 
	{	intPort[0]=atoi(p); 
		intPortCount++; 
		for(i=0;*p && (i<100);) 
		{	if(*(p++)==',') 
			{	if(intPort[i]<1 || intPort[i]>65535) 
				{	printf("Port Error!\n"); 
					return(3); 
				} 
				i++; 
				intPort[i]=atoi(p); 
				intPortCount++; 
			} 
		} 
	} 
	if(argc==4) 
	{	intMAXThread=atoi(argv[3]); 
		if(intMAXThread<5)	intTimeOut=intMAXThread; 
	} 
	if(argc==5) 
	{	intMAXThread=atoi(argv[3]); 
		intTimeOut=atoi(argv[4]); 
	} 
	if(intMAXThread<5 || intMAXThread>300)	intMAXThread=60; 
	if(intTimeOut<1 || intTimeOut>4)	intTimeOut=1; 
 
	/*thdINFO=calloc(intMAXThread,sizeof(struct THREADINFO *)); 
	if(thdINFO==NULL) 
	{	printf("Could not allocate memory!\n"); 
		return(4); 
	}*/ 
 
	if(!(fp=fopen("DPPS.TXT","a"))) 
	{	printf("Could not create log file: DPPS.TXT!\n"); 
		return(5); 
	} 
 
	if (WSAStartup(MAKEWORD(1, 1), &wsaData) < 0) 
    {	printf("Could not init Windows Socket!\n"); 
		return(6); 
	} 
 
	serverIP.s_addr=htonl(startIP); 
	printf("Scan form %s to ",inet_ntoa(serverIP)); 
	serverIP.s_addr=htonl(endIP); 
	printf("%s\tPort: ",inet_ntoa(serverIP)); 
 
	if(intPortCount!=-1) 
	{	for(i=0;i<=intPortCount;i++)printf("%d ",intPort[i]); 
		j=intPort[0]; 
	} 
	else 
	{	j=startPort; 
		printf("%d to %d",startPort,endPort); 
	} 
	printf("\n----------------------------------------------------------\n"); 
 
 
	i=startIP; 
	int k=0; 
	while(i<=endIP) 
	{ 
		if(((i % 256)==0)||((i % 256)==255)){i++;continue;} 
		if(intThreadNum