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

📄 scanport.cpp

📁 多线程扫描端口
💻 CPP
字号:
#include "StdAfx.h"
#include "scanport.h"
#include <winsock2.h>
CScanPort::CScanPort(char* addr,unsigned start,unsigned end,int threadid)
{
    ThreadID = threadid;
	if ( addr!=NULL && addr[0]!='\0')
		strcpy ( Address, addr);
	else
		Address[0] = '\0';
	c_socket = -1;
	sPort  = start ;
    ePort  = end ;
	hThread = CreateThread( 
							NULL,                        // no security attributes 
							0,                           // use default stack size  
							(LPTHREAD_START_ROUTINE)BeginScan ,                  // thread function 
							this,                        // argument to thread function 
							0,                           // use default creation flags 
							NULL);                       // returns the thread identifier 
					 

}

CScanPort::~CScanPort(void)
{
}

UINT CScanPort:: BeginScan(LPVOID* param)
{
    CScanPort* This = (CScanPort*) param;
	int i;
    fopen ("port.txt","w");
	
	for ( i=This->sPort; i<This->ePort+1 ;i++)
	{
		This->cPort = i;     
	    if (This-> Open() == 0 )//成功
		{
			 printf ("< %3d >  connect port %5d success!\n",This->ThreadID,This-> cPort ) ;
		     This-> WritetoFile();
		}
	}
  return 0;
}
/*
  建一个socket对象
  返回:
      0:成功
     -1:失败
*/
int CScanPort::CreateSocket()
{
 
	c_socket = socket ( AF_INET, SOCK_STREAM, 0 );
	if ( c_socket == SOCKET_ERROR )
	{ 
		 printf (" create socket fault!\n ");
         return -1;
	}

}
/*
 建立本机的socket通道
 返回:
      0:成功
     -1:失败
*/
int CScanPort::Open ()
{
	struct sockaddr_in remoteaddr;
	struct hostent*    remotehost;
	remoteaddr.sin_family = AF_INET;
	remoteaddr.sin_addr.s_addr   = inet_addr ( Address );
	remoteaddr.sin_port          = htons ( cPort );
	if ( CreateSocket() == -1 ) return -1;
	//由主机名得到ip地址
	if ( remoteaddr.sin_addr.s_addr == INADDR_NONE) 
	{
       remotehost =  gethostbyname( Address );
	   if ( remotehost == NULL )
	   {
		   Address [0] = '\0';
		   printf ("have no such a machine%s!\n",Address);
		   return -1;
	   }

	   memcpy( &remoteaddr.sin_addr , remotehost->h_addr,remotehost->h_length );
	   strcpy ( Address , inet_ntoa( remoteaddr.sin_addr) );
	} 
	//连接
    if  ( connect ( c_socket, (SOCKADDR*) &remoteaddr, sizeof ( struct sockaddr_in ) ) == SOCKET_ERROR )
	{
		 printf ("< %3d >  connect port %5d  ...\n",ThreadID,cPort ) ;
		 closesocket( c_socket);
		 return -1; 
	}
	closesocket( c_socket);
	return 0;
}
/*
 把结果写入文件
 返回:
      0:成功
     -1:失败
*/
int CScanPort::WritetoFile()
{
	struct Save ss;
	FILE* fp;
    int  len;
	int  ret = 0;
	fp = fopen ("port.txt","a+");
	if (fp == NULL) 
	{
		printf ("file port.txt open fault!\n");
		ret = -1;
		goto _EXIT_;
	}
    len = sizeof (ss);
	strcpy ( ss.address ,Address);
	ss.port = cPort;
	if ( fwrite ( &ss,1, len, fp ) != len )
	{
		printf ("file write fault!\n");
		ret = -1;
		goto _EXIT_;
	}
_EXIT_:
	fclose ( fp );
	return ret;

}

⌨️ 快捷键说明

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