迷雾少年 发表于 2015-7-6 10:34:02

【纯C多线程端口扫描器】

本帖最后由 迷雾少年 于 2015-7-6 10:36 编辑


线程数和端口扫描范围在源码里 自己修改即可
原理还是全连接:mad:   半连接扫描搞起来太麻烦了
程序还有些BUG自己修改即可
程序中加了些延时 不然太吃CPU
默认线程是100


代码很简单还望大牛别喷:hug:
分两个文件 Hander.h 和Main..C
/*文件 Hander.h */
#include <stdio.h>
#include <WinSock2.h>
#include <Windows.h>


#define 线程数100
#define 端口末尾 65500
/* 类型定义 */
typedef unsigned short intUSHORT;
typedef void*               LPVOID;
/* 类型定义 */



/* 函数定义 */
void Thread(USHORT Port);       /* 线程函数 */
intPortScan(USHORT Port);       /* 端口扫描 检测某个IP的端口是否正常*/
void Startup();                   /* 初始化SOCKET环境 */

void Endup();                   /* 全部线程完成 */
/* 函数定义 */




/* 文件 Main.C */

#include "Hander.h"
char IpAddress = {0};
void Thread(USHORT Port)
{

        char number={0};
        char title = {"title"};
        if(Port<=端口末尾)
        {
                /* 检测端口 */
                itoa(Port,number,10);
               
                lstrcatA(title," ");
                lstrcatA(title,number);
                system(title);

                Sleep(30);
                if(PortScan(Port))
                printf("打开服务:%d\n",Port);
                //else printf("错误:%d\n",Port);
        }
       

        if((Port)>=端口末尾)
    {
                if(Port==端口末尾)
                {
                        Endup();
                        return;
                }
          return;
        }
       
        /* 启动下一条 */
        Sleep(500);
        CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Thread,(LPVOID)(Port+线程数),NULL,NULL);
       
       
}

int PortScan(USHORT Port)
{
        SOCKET socketClient = {0};
        SOCKADDR_IN addrClient = {0};


       


        socketClient = socket(AF_INET,SOCK_STREAM,0);
        if(socketClient ==INVALID_SOCKET )return -1;
        addrClient.sin_addr.S_un.S_addr = inet_addr(IpAddress);
        addrClient.sin_family = AF_INET;
        addrClient.sin_port = htons(Port);
        //printf("%d号线程开始连接\n",Port);
        if(!connect(socketClient,(        SOCKADDR *)&addrClient,sizeof(SOCKADDR_IN)))
        {
                closesocket(socketClient);

               
                return 1;
        }

       
        return 0;

       
       

}
void Startup()
{
        WSADATA wsadata = {0};
       
        WSAStartup(MAKEWORD(2,0),&wsadata);


}
void Endup()
{
        printf("全部线程完成\n");
        /* 等待 */
        Sleep(100);
        /* 清除 */
        WSACleanup();


}
int main(void)
{
        USHORT Loop = 1;
       
        /*设置标题*/
        system("title 端口扫描器");
        system("color 2");


    printf("请输入扫描的IP地址或域名:");
        scanf("%s",IpAddress);
        /* 检测IP正确否 +转换域名 检测 */

        /* 省略 */
       
        printf("\n【说明 】1.默认线程是255*3 端口扫描 1 - 65535 请自己修改源码 2.请直接输入能ping通的ip,不要输入域名 这部分代码还没写(┬_┬)\n");

        /* 检测IP正确否 +转换域名 检测 */
    Startup();
       
        printf("正在扫描%s以下为改服务器开放端口\n",IpAddress);
        for (; Loop <= 线程数; Loop++)
        {
          
                CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Thread,(LPVOID)Loop,NULL,NULL);
        }
       
        scanf("%d",0);
        return 0;
}

复制文件编译 是否
有如下提示
1>Main.obj : error LNK2019: 无法解析的外部符号 __imp__closesocket@4,该符号在函数 _PortScan 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 __imp__connect@12,该符号在函数 _PortScan 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 __imp__htons@4,该符号在函数 _PortScan 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 __imp__inet_addr@4,该符号在函数 _PortScan 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 __imp__socket@12,该符号在函数 _PortScan 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 __imp__WSAStartup@8,该符号在函数 _Startup 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 _Endup 中被引用

想知道怎么解决就回帖吧:lol:





**** Hidden Message *****
**** Hidden Message *****


完整文件下载: **** Hidden Message *****

小人 发表于 2015-7-6 11:08:47

在头文件下面加上 #pragma comment(lib,"ws2_32.lib")   就可以编译了{:9_240:}

迷雾少年 发表于 2015-7-6 11:20:45

小人 发表于 2015-7-6 11:08
在头文件下面加上 #pragma comment(lib,"ws2_32.lib")   就可以编译了

:huffy:别说出来呀

小人 发表于 2015-7-6 11:22:14

迷雾少年 发表于 2015-7-6 11:20
别说出来呀

{:9_222:} 好吧 ,说错了 {:9_240:}

Victory_6226 发表于 2015-7-6 15:32:18

Thread的port是谁给的值呢,不懂呢socket编程

迷雾少年 发表于 2015-7-6 17:07:13

Victory_6226 发表于 2015-7-6 15:32
Thread的port是谁给的值呢,不懂呢socket编程

从1开始,main函数循环启动线程通把liop传递过去

99101553@qq.com 发表于 2016-9-7 15:28:52

{:5_94:}

15172480523 发表于 2016-11-10 21:42:15

哈哈

天再旦 发表于 2017-3-18 16:04:17

自己写扫描器,碰到了很多问题,那大神的参考一下

天再旦 发表于 2017-3-18 16:14:23

huifu

jdp7385 发表于 2017-3-19 10:11:37

谢谢

cylance 发表于 2017-11-14 20:52:40

lol

coffeemlx 发表于 2018-1-26 07:39:29

自己写扫描器,碰到了很多问题,那大神的参考一下

378828730 发表于 2018-3-30 17:56:45

lol

主旋律kk 发表于 2018-4-3 16:19:57

端口扫描器如何才能增加代码量

桃花飞舞 发表于 2018-4-3 22:51:56

看不懂,6666

桃花飞舞 发表于 2018-4-3 22:55:27

看不懂,,,666,,,,,,,

火之国漩涡 发表于 2018-4-22 19:58:21

求大神指教

Asll 发表于 2018-5-2 20:38:03

看看

淮玉浣纱 发表于 2020-5-10 23:54:04

0.0
页: [1]
查看完整版本: 【纯C多线程端口扫描器】