• 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~~
    ", Ip, CurrPort);
    			closesocket(s);
    		}
    		else {
    			printf("%s:%d Failed
    ", Ip, CurrPort);
    		}
    	}	
    	printf("Cost time:%f second
    ", 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>

  • 相关阅读:
    TextBox类的成员
    【VB.Net】字节数与字符数的取得
    限制文本框的输入类型
    【转】FxCop 设计规则
    【Spread Sheet 应用(三)】Enter移向下一个单元格
    【ASP.NET】打开关闭新窗体
    常用字符对应ASCII码值
    初识CodeSmith分享两个模板
    【VB.NET】自定义控件(一)属性说明
    LeetCode: Length of Last Word
  • 原文地址:https://www.cnblogs.com/clc2008/p/6858670.html
Copyright © 2020-2023  润新知