TCP connect端口扫描C++简单程序

    xiaoxiao2025-03-31  5

    ///

    pragma once

    ifndef PORTSCAN_H

    define PORTSCAN_H

    include

    include

    include

    include

    include

    pragma comment(lib,”ws2_32.lib”)

    using namespace std;

    class CPortScan { public: CPortScan(); ~CPortScan(); public: void ScanPort(); void ShowInfo();

    void Init(); void UnInit(); int Scan(char *Ip,int StartPort,int EndPort);

    public: SOCKET m_conn; list m_connInfo; long m_Ip ; };

    endif

    ///

    include “PortScan.h”

    CPortScan::CPortScan() { m_conn=NULL; m_Ip=0; Init(); }

    CPortScan::~CPortScan(void) { UnInit(); }

    void CPortScan::ScanPort() { int ret; int begin,end; begin=0; end = 0; char szIp[16]=” “; printf(“亲,请输入IP地址 :\n”); gets(szIp);

    printf("亲,请输入端口范围 :\n"); scanf("%d %d",&begin,&end); ret=Scan(szIp,begin,end); if(ret) printf("Scan OK\n");

    }

    void CPortScan::Init() { //打开库 WORD wVersion = MAKEWORD(2, 2); WSADATA wsaData; ::WSAStartup(wVersion, &wsaData);

    //校验库 if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion)) { return ; }

    } void CPortScan::UnInit() { list::iterator ite = m_connInfo.begin(); while(ite!=m_connInfo.end()) { ite= m_connInfo.erase(ite);

    } ::WSACleanup();

    } int CPortScan::Scan(char *Ip,int StartPort,int EndPort) { clock_t StartTime,EndTime; float CostTime;

    TIMEVAL TimeOut; FD_SET mask; struct sockaddr_in server; int CurrPort; int ret; unsigned long mode=1; //ioctlsocket函数的最后一个参数 TimeOut.tv_sec=0; TimeOut.tv_usec=50; //超时为50ms FD_ZERO(&mask); server.sin_family=AF_INET; server.sin_addr.s_addr=inet_addr(Ip); m_Ip= inet_addr(Ip); int i=0; StartTime=clock(); for(CurrPort=StartPort;CurrPort<=EndPort;CurrPort++) { m_conn=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(m_conn<0) { ::closesocket(m_conn); break; } FD_SET(m_conn,&mask); ::ioctlsocket(m_conn,FIONBIO,&mode); //设置为非阻塞模式 server.sin_port=htons(CurrPort); ::connect(m_conn,(struct sockaddr *)&server,sizeof(server)); ret=::select(0,NULL,&mask,NULL,&TimeOut); //查询可写入状态 if(0==ret || -1==ret) { //printf("[%d] Failed\n",i); ::closesocket(m_conn); } else { //存储连接结构 m_connInfo.push_back(CurrPort); ::closesocket(m_conn); } } EndTime=clock(); CostTime=(float)(EndTime-StartTime)/CLOCKS_PER_SEC; printf("Cost time:%f second\n",CostTime); return 1;

    }

    void CPortScan::ShowInfo() { list ::iterator ite = m_connInfo.begin(); int i=1; in_addr addr; addr.S_un.S_addr=m_Ip;

    while(ite!=m_connInfo.end()) { printf("[%d] %s \n",*ite,inet_ntoa(addr)); i++; ite++; }

    }

    转载请注明原文地址: https://ju.6miu.com/read-1297568.html
    最新回复(0)