connect函数端口扫描C语言,c++ 端口扫描程序实现案例分享

—-想了解c++ 端口扫描程序实现案例分享的全部内容且更多的C语言教程关注

第一、原理

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

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

第二、单线程实现方式

// PortScanf.cpp : 定义控制台应用程序的入口点。 // #define WIN32_LEAN_AND_MEAN #include "stdafx.h" #include #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 Failedn", Ip, CurrPort); } } printf("Cost time:%f secondn", CostTime); //输出扫描过程中耗费的时间 WSACleanup(); //释放动态连接库并释放被创建的套接字 return 1; } int main() { scant("127.0.0.1", 75, 100); return 0; }

270f017a5d180a88ecbffa65b762ad09.png

第三、多线程实现方式

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

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

270f017a5d180a88ecbffa65b762ad09.png

以上这篇c++ 端口扫描程序实现案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/487942.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值