c++ 端口扫描程序实现案例

发布时间:2026/5/16 19:08:11

c++ 端口扫描程序实现案例 第一、原理端口扫描的原理很简单就是建立socket通信切换不通端口通过connect函数如果成功则代表端口开发者否则端口关闭。所有需要多socket程序熟悉本内容是在window环境下的第二、单线程实现方式12345678910111213141516171819202122232425262728293031323334353637383940414243444546// PortScanf.cpp : 定义控制台应用程序的入口点。//#define WIN32_LEAN_AND_MEAN#include stdafx.h#include WinSock2.h#pragma comment(lib, Ws2_32)intscant(char*Ip,intStartPort,intEndPort){WSADATA wsa;SOCKET s;structsockaddr_in server;intCurrPort;//当前端口intret;WSAStartup(MAKEWORD(2, 2), wsa);//使用winsock函数之前必须用WSAStartup函数来装入并初始化动态连接库server.sin_family AF_INET;//指定地址格式在winsock中只能使用AF_INETserver.sin_addr.s_addr inet_addr(Ip);//指定被扫描的IP地址for(CurrPort StartPort; CurrPort EndPort; CurrPort){s socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);server.sin_port htons(CurrPort);//指定被扫描IP地址的端口号ret connect(s, (structsockaddr *)server,sizeof(server));//连接if(0 ret)//判断连接是否成功{printf(%s:%d Success O(∩_∩)O~~\n, Ip, CurrPort);closesocket(s);}else{printf(%s:%d Failed\n, Ip, CurrPort);}}printf(Cost time:%f second\n, CostTime);//输出扫描过程中耗费的时间WSACleanup();//释放动态连接库并释放被创建的套接字return1;}intmain(){scant(127.0.0.1, 75, 100);return0;}第三、多线程实现方式由于单线程执行速度有些慢我们加入多线程运行12345678910111213141516171819202122232425262728typedefstruct_tagValue{intstart;intend;}PortNums;void_cdecl beginThreadFunc1(LPVOIDlpParam) {PortNums *pnInt (PortNums*)lpParam;scan(127.0.0.1, pnInt-start, pnInt-end);}inta(){PortNums m1;m1.start 70;m1.end 500;PortNums m2;m2.start 501;m2.end 1000;_beginthread(beginThreadFunc1, 0, m1);_beginthread(beginThreadFunc1, 0, m2);getchar();return0;}注意需要#includeprocess.h以上这篇c 端口扫描程序实现案例就是小编分享给大家的全部内容了

相关新闻