c++ 端口掃描程序?qū)崿F(xiàn)案例
更新時間:2017年05月16日 08:08:59 投稿:jingxian
下面小編就為大家?guī)硪黄猚++ 端口掃描程序?qū)崿F(xiàn)案例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
第一、原理
端口掃描的原理很簡單,就是建立socket通信,切換不通端口,通過connect函數(shù),如果成功則代表端口開發(fā)者,否則端口關(guān)閉。
所有需要多socket程序熟悉,本內(nèi)容是在window環(huán)境下的
第二、單線程實現(xiàn)方式
// PortScanf.cpp : 定義控制臺應(yīng)用程序的入口點。 // #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; //當(dāng)前端口 int ret; WSAStartup(MAKEWORD(2, 2), &wsa); //使用winsock函數(shù)之前,必須用WSAStartup函數(shù)來裝入并初始化動態(tài)連接庫 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(); //釋放動態(tài)連接庫并釋放被創(chuàng)建的套接字 return 1; } int main() { scant("127.0.0.1", 75, 100); return 0; }
第三、多線程實現(xiàn)方式
由于單線程執(zhí)行速度有些慢,我們加入多線程運行,
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++ 端口掃描程序?qū)崿F(xiàn)案例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
求32位機器上unsigned int的最大值及int的最大值的解決方法
本篇文章是對求32位機器上unsigned int的最大值及int的最大值的解決方法進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++踩坑實戰(zhàn)之構(gòu)造和析構(gòu)函數(shù)
不論是構(gòu)造函數(shù),還是析構(gòu)函數(shù),都是C++、C#語言相對于其他語言而言特殊的地方,它是為了方便類中對象的初始化,這篇文章主要給大家介紹了關(guān)于C++踩坑實戰(zhàn)之構(gòu)造和析構(gòu)函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-07-07