c++ 端口扫描程序实现案例
第一、原理
端口扫描的原理很简单,就是建立socket通信,切换不通端口,通过connect函数,如果成功则代表端口开发者,否则端口关闭。
所有需要多socket程序熟悉,本内容是在window环境下的
第二、单线程实现方式
// PortScanf.cpp : 定义控制台应用程序的入口点。 // #define WIN32_LEAN_AND_MEAN #include "stdafx.h" #include <WinSock2.h> #pragma comment(lib, "Ws2_32") int scant(char *Ip, int StartPort, int EndPort) { WSADATA wsa; SOCKET s; struct sockaddr_in server; int CurrPort; //当前端口 int ret; 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, (struct sockaddr *)&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(); //释放动态连接库并释放被创建的套接字 return 1; } int main() { scant("127.0.0.1", 75, 100); return 0; }
第三、多线程实现方式
由于单线程执行速度有些慢,我们加入多线程运行,
typedef struct _tagValue { int start; int end; }PortNums; void _cdecl beginThreadFunc1(LPVOID lpParam) { PortNums *pnInt = (PortNums*)lpParam; scan("127.0.0.1", pnInt->start, pnInt->end); } int a() { 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(); return 0; }
注意需要#include<process.h>
以上这篇c++ 端口扫描程序实现案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
您可能感兴趣的文章
- 04-02c语言没有round函数 round c语言
- 01-10深入理解C++中常见的关键字含义
- 01-10使用C++实现全排列算法的方法详解
- 01-10c++中inline的用法分析
- 01-10用C++实现DBSCAN聚类算法
- 01-10全排列算法的非递归实现与递归实现的方法(C++)
- 01-10C++大数模板(推荐)
- 01-10浅谈C/C++中的static与extern关键字的使用详解
- 01-10深入C/C++浮点数在内存中的存储方式详解
- 01-10深入理解C/C++混合编程
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11ajax实现页面的局部加载
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法实例总结
- 01-10SublimeText编译C开发环境设置
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10使用C语言求解扑克牌的顺子及n个骰子