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

📄 scanuseport.cpp

📁 此为计算机网络课程设计C/C++源代码 包括一些协议的底层实现
💻 CPP
字号:
#pragma pack(4)
#pragma comment (lib,"Ws2_32.lib")
#include <stdio.h>
#include <WINSOCK2.H>
#include <WS2TCPIP.H>
#include <stdlib.h>
#include <iostream.h>

#define STATUS_FAILED 0XFFFF		/*错误码*/
unsigned long serverIP;				/*扫描的服务器地址*/
long MaxThread=200;					/*最大允许的扫描线程数*/
long ThreadCount=0;					/*当前正在扫描的线程数*/
long *aa=&ThreadCount;				/**/

DWORD WINAPI ScanPort(LPVOID lpParam);	/*扫描端口的线程*/

void main(int argc,char *argv[])
{
	if (argc!=2)
	{
		cout<<"输入格式错误:ScanUsePort serverip "<<endl;
		return;
	}

	WSADATA WSAData;
	if (WSAStartup(MAKEWORD(2,2),&WSAData) != 0)	/* 开始使用Ws2_32.dll */
	{
		cout<<"WSAStartup failed: "<<GetLastError()<<endl;
		ExitProcess(STATUS_FAILED);
	}

	serverIP=inet_addr(argv[1]);
	cout<<"使用中的端口号: "<<endl;

	for (int i=1;i<1024;i++)		/*扫描所有的服务器端口*/
	{
		while (ThreadCount>=MaxThread)	/*超过最大允许线程数,等待*/
		{
			Sleep(10);
		}
		DWORD ThreadID;

		/*创建线程,扫描端口*/
		CreateThread(NULL,0,ScanPort,(LPVOID)new short(i),0,&ThreadID);
	}

	while (ThreadCount > 0)
	{
		Sleep(50);
	}
	WSACleanup();	/*调用WSACleanup函数来解除与SOCKET库的绑定并且释放SOCKET库所占用的系统资源*/
}

DWORD WINAPI ScanPort(LPVOID lpParam)	/*扫描端口的线程*/
{
	short Port=*(short *)lpParam;
	InterlockedIncrement(aa);			/*线程数目加1*/

	SOCKET sock=socket(AF_INET,SOCK_STREAM,0);	/*创建原始套接字*/

	if ( sock == INVALID_SOCKET )
	{
		cout<<"创建套接字失败!"<<endl;
		return 0;
	}
	else
	{
		sockaddr_in serverAddr;						/*搜索的服务器IP*/
		serverAddr.sin_family = AF_INET;
		serverAddr.sin_port=htons(Port);			/*端口地址*/
		serverAddr.sin_addr.S_un.S_addr=serverIP;	/*IP地址*/

		/*判断此端口是否打开*/
		connect(sock,(sockaddr *)&serverAddr,sizeof(serverAddr));

		struct fd_set write;						/*写socket集合*/
		FD_ZERO(&write);
		FD_SET(sock,&write);

		struct timeval timeout;						/*超时*/
		timeout.tv_sec=100/1000;
		timeout.tv_usec=0;

		/*设置超时时间*/
		if (select(0,NULL,&write,NULL,&timeout)>0)
		{
			cout<<Port<<endl;
		}
		closesocket(sock);							/*关闭socket*/
	}
	InterlockedDecrement(aa);						/*进程数目-1*/
	return 0;
}

⌨️ 快捷键说明

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