news 2026/5/16 19:08:06

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c++ 端口扫描程序实现案例

第一、原理

端口扫描的原理很简单,就是建立socket通信,切换不通端口,通过connect函数,如果成功则代表端口开发者,否则端口关闭。

所有需要多socket程序熟悉,本内容是在window环境下的

第二、单线程实现方式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

// 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_INET

server.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;

}

第三、多线程实现方式

由于单线程执行速度有些慢,我们加入多线程运行,

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

typedefstruct_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;

}

注意需要#include<process.h>

以上这篇c++ 端口扫描程序实现案例就是小编分享给大家的全部内容了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 19:08:05

Linux僵死IO与不可中断睡眠分析

Linux僵死IO与不可中断睡眠分析在 Linux 系统里&#xff0c;有一类问题特别让人困惑&#xff1a;进程存在、CPU 不高&#xff0c;但命令卡住、服务停不下来、甚至 kill 也无效。很多这类现象最终都与不可中断睡眠状态有关&#xff0c;尤其常见于 IO 阻塞场景。中级阶段需要理解…

作者头像 李华
网站建设 2026/5/16 19:03:12

UltimateStack终极堆叠模组:打破Minecraft物品限制的完整指南

UltimateStack终极堆叠模组&#xff1a;打破Minecraft物品限制的完整指南 【免费下载链接】UltimateStack A Minecraft mod,can modify ur item MaxStackSize (more then 64) 项目地址: https://gitcode.com/gh_mirrors/ul/UltimateStack 你是否厌倦了Minecraft中64个物…

作者头像 李华
网站建设 2026/5/16 19:01:11

Coding爆发打破「AI泡沫论」,MiniMax能否卡位下一个Google?

【Coding爆发打破「AI泡沫论」】 Coding的爆发&#xff0c;彻底断绝了「AI泡沫论」&#xff0c;这已成为共识。阿里财报显示MaaS ARR超过80亿元&#xff0c;年底还有望再涨三倍以上&#xff0c;意味着只有投入没有回报的周期已过去&#xff0c;能开始盈利&#xff0c;大小玩家都…

作者头像 李华
网站建设 2026/5/16 19:01:03

如何在PC上运行Switch游戏:Ryujinx开源模拟器的完整配置指南

如何在PC上运行Switch游戏&#xff1a;Ryujinx开源模拟器的完整配置指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上畅玩《塞尔达传说&#xff1a;旷野之息》、《马里奥…

作者头像 李华
网站建设 2026/5/16 18:59:14

SLAM_TOOLBOX实战:从零到一构建长期可用的2D地图

1. SLAM_TOOLBOX入门&#xff1a;为什么选择它来构建2D地图&#xff1f; 第一次接触SLAM技术时&#xff0c;我被各种开源工具搞得眼花缭乱。直到在真实机器人项目里用了SLAM_TOOLBOX&#xff0c;才发现它简直是长期建图的"瑞士军刀"。这个基于ROS的工具包最打动我的地…

作者头像 李华