扫描多IP之多端口 ////////////////////////////////////////////////////////////////////////// //FileName: PortScanner.cpp //Data: 2009-04-18 //Remark: 扫描核心代码 ////////////////////////////////////////////////////////////////////////// #pragma once #include "Header.h" #include "resource.h" ////////////////////////////////////////////////////////////////////////// //端口器扫描初始化 ////////////////////////////////////////////////////////////////////////// BOOL InitPortScan() { WSADATA WsaData; //构建socket版本信息 WORD WsaVersion=MAKEWORD(2,2); //初始化网络 if(WSAStartup(WsaVersion,&WsaData;)!=0) { MessageBoxA(NULL,"WSAStartup fail;",NULL,NULL); return FALSE; } return TRUE; } ////////////////////////////////////////////////////////////////////////// //connect线程函数 ////////////////////////////////////////////////////////////////////////// DWORD WINAPI PortScanthread(LPVOID LpParam) { ThreadParam Param; //将参数复制 MoveMemory(&Param;,LpParam,sizeof(Param)); //将hCopyOkEvent设为有信号状态来通知扫描主线程进行下一次循环 SetEvent(Param.hCopyOkEvent); SOCKET Sock; SOCKADDR_IN SockAddr = {0}; //创建socket Sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (Sock==INVALID_SOCKET) { MessageBoxA(NULL,"INVALID_SOCKET",NULL,NULL); } //填充IP地址及端口信息 SockAddr.sin_family = AF_INET; SockAddr.sin_addr.s_addr = htonl(Param.Ip); SockAddr.sin_port = htons(Param.Port); //将IP地址转换为字符串 char *IpChar = inet_ntoa(SockAddr.sin_addr); char str[200]; if(connect(Sock,(SOCKADDR *)&SockAddr;,sizeof(SockAddr))==0) { //连接成功, sprintf(str,"%s : %d 连接成功\n",IpChar,Param.Port); } else { //连接失败 sprintf(str,"%s : %d 连接失败\n",IpChar,Param.Port); } //添加显示信息 InsertInfo(str); //释放一个信号量计数 ReleaseSemaphore(Param.hThreadNum,1,NULL); //关闭socket closesocket(Sock); return 0; } ////////////////////////////////////////////////////////////////////////// //扫描主线程 ////////////////////////////////////////////////////////////////////////// DWORD WINAPI MainThread(LPVOID LpParam) { MainThreadParam Param; //将参数复制 MoveMemory(&Param;,LpParam,sizeof(Param)); //将Param.hCopyEvent设置为有信号状态 SetEvent(Param.hCopyEvent); ThreadParam threadparam = {0}; //创建子线程的“参数复制完成”事件对象,并作为参数传入PortScanthread() HANDLE hThreadCopyOkEvent = CreateEvent(NULL,TRUE,FALSE,NULL); threadparam.hCopyOkEvent=hThreadCopyOkEvent; //创建一个信号量对象来控制子线程的总数量PortScanthread() HANDLE hThreadNum = CreateSemaphore(NULL,256,256,NULL); threadparam.hThreadNum = hThreadNum; //循环connect for (DWORD Ip = Param.StartIp;Ip<=Param.EndIp;Ip++) { for (DWORD Port = Param.StartPort;Port<=Param.EndPort;Port++) { //等待hThreadNum发出信号(表示有可有线程) DWORD WaitRes =WaitForSingleObject(hThreadNum,200); if (WaitRes==WAIT_OBJECT_0) { threadparam.Ip=Ip; threadparam.Port=Port; CreateThread(NULL,0,PortScanthread,&threadparam;,0,NULL); //等待其子线程发出“参数复制完毕”的信号 WaitForSingleObject(threadparam.hCopyOkEvent,INFINITE); //重置threadparam.hCopyOkEvent为无信号状态 ResetEvent(threadparam.hCopyOkEvent); } else if(WaitRes==WAIT_TIMEOUT) { Port--; continue; } } } return 0; }
2023-12-11 08:02:58 4.09MB vc++
1
LuaBind 是一个帮助你绑定C++和Lua的库.她有能力暴露 C++ 函数和类到 Lua . 她也有 能力支持函数式的定义一个Lua类,而且使之继承自C++或者Lua. Lua类可以覆写从 C++ 基类 继承来的虚函数. 她的目标平台是Lua 5.0 ,不能支持Lua 4.0 .
2023-12-11 08:02:16 30KB lua
1
《Visual C++ 2008入门经典》高清晰PDF,此书为英文版,英文名: Ivor Horton's Beginning Visual C++ 2008,本书系编程语言先驱者Ivor Horton的经典之作,是学习C++编程最畅销的图书品种之一,不仅涵盖了Visual C++ .NET编程知识,还全面介绍了标准C++语言和.NET C++/CLI。
2023-12-11 08:01:54 8.75MB VC++ 2008 基础教程
1
VC++高级表格,可编辑ListView
2023-12-11 08:01:03 320KB 高级表格
1
包括oled,以及max30102的代码源,HAL库
2023-12-10 21:13:52 26KB stm32
1
针对跨平台Qt4的excel操作第三方库的源代码和测试demo(注意:桌面版编译有错,有意者请慎重下载)。 GitHub上有针对Qt5版本的QXlsx开源库,但是目前社会上一部分企业的产品上用的还是Qt4,所以针对4的需求还是有的。这个版本的库文件目前测试在Linux设备端可以正常工作(在虚拟机下编译不通过,有兴趣和精力的同学可以尝试解决反馈一下),可以同时支持xls/xlsx格式的excel文件,默认生成的路径在/root下,可以传参给saveAs函数使其将文件生成在指定的路径。
2023-12-10 18:54:53 868KB
1
Unicode编码下的16*16点阵ASCII库(先左后右先上后下),宋体12号或小4字体大小(简体)。取码范围0X0000-0X00FF
2023-12-10 13:27:41 8KB
1
 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致。
2023-12-10 08:02:39 127KB VC++
1
超方便的vc++6 安装软件,解压即用,并且win7兼容
2023-12-10 08:01:14 44.32MB vc++6
1
parasolid内核PK函数 lib 库文件 + 入门教程
2023-12-09 20:59:46 512.59MB
1