扫描多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
摄影测量相对定向VC程序,适合科研人员和大学生研究生开发影像处理软件和遥感技术等。
2023-10-06 20:37:53 911KB vc++ 摄影测量 遥感
1
使用简单方便的解析XML的小程序代码,不需要加入任何动态库
2023-03-07 17:36:47 96KB VC XML 源程序
1
帮助大家学习,希望都有自己的创意。不要完全抄袭
2023-01-04 21:26:16 3.25MB Access数据库连接
1
基于视图变形方法的图像插值的视点合成程序,在一些场合需要提供真实接触感觉,可以根据视角位置变化而生成对应视点的视图,提供相应的三维感觉,从而能够“环视”场景中的三维物体。-image interpolation procedures, in some occasions the need to provide access to real sense, it may change position and perspective generation of the corresponding Perspective View, with a corresponding three-dimensional feel, to "look at" the scene of the 3D object.
2022-12-11 20:47:04 134KB view morphing 视图变形 视点合成
1
利用c++程序来进行矩阵svd分解.奇异值分解 (singular value decomposition,SVD) 是另一种正交矩阵分解法;SVD是最可靠的分解法,但是它比QR 分解法要花上近十倍的计算时间。[U,S,V]=svd(A),其中U和V代表二个相互正交矩阵,而S代表一对角矩阵。 和QR分解法相同者, 原矩阵A不必为正方矩阵。使用SVD分解法的用途是解最小平方误差法和数据压缩。
2022-12-02 18:54:49 769KB svd c++
1
C#窗体嵌入到VC程序框架中C#窗体嵌入到VC程序框架中C#窗体嵌入到VC程序框架中C#窗体嵌入到VC程序框架中
2022-11-17 21:35:58 288KB vc c#窗体
1
利用VC++实现计算器的例子 可以作为VC初学者学习
2022-11-11 17:57:20 7.13MB VC++程序 计算器
1
由vc2003开发的Demo 该程序不显示对话框界面;对特定的程序进行重启。 1.如果程序中调用该exe时:需要加入命令行参数 CString strCmdLine="-D:\\Release -Test.exe"; ShellExecute(NULL, _T("open"), "MMFCGuardProcess.exe", strCmdLine, "D:\\", SW_SHOWNORMAL); Test.exe是你要重新启动的程序; MMFCGuardProcess.exe重启功能的程序 2.可通过设置快捷方式设置命令行参数 3.同时你可对该程序做一些改动,使该程序成为一个守护进程的程序,也比较简单
2022-07-21 08:23:06 29KB CreateProcess TerminateProcess 重启
1
VC++-程序设计全文共15页,当前为第1页。VC++-程序设计全文共15页,当前为第1页。实验项目 VC++-程序设计全文共15页,当前为第1页。 VC++-程序设计全文共15页,当前为第1页。 学生课程成绩操作系统 实验日期 2017.11.22 实验地点 实验楼C 姓名 唐兵兵 实验类型 传统实验 现代实验 其 他 验证性 综合性 设计性 其 他 自立式 合作式 研究式 其 他 实验目的 1.掌握Visual C++6.0开发环境开发软件的方法; 2.掌握单文档应用程序结构,熟悉应用程序界面设计方法; 3.掌握对话框、常用控件、菜单、工具栏和ActiveX控件的使用; 4.掌握MFC编写ODBC或ADO数据库应用程序的方法和技巧。 实验仪器设备 1.硬件环境:计算机一台; 2.软件环境:Visual C++6.0软件。 三、实验原理、内容及步骤 1.实验原理: (1)MFC编写ODBC或ADO数据库应用程序的方法和技巧; (2)系统界面设计和功能实现的一般方法和过程。 2.实验内容: 综合运用所学的知识,独立设计和实现一个信息管理系统应用程序。 3.实验步骤 (1)系统界面设计
2022-06-20 18:04:41 2.18MB 文档资料