【纯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 ***** 在头文件下面加上 #pragma comment(lib,"ws2_32.lib") 就可以编译了{:9_240:} 小人 发表于 2015-7-6 11:08
在头文件下面加上 #pragma comment(lib,"ws2_32.lib") 就可以编译了
:huffy:别说出来呀 迷雾少年 发表于 2015-7-6 11:20
别说出来呀
{:9_222:} 好吧 ,说错了 {:9_240:} Thread的port是谁给的值呢,不懂呢socket编程 Victory_6226 发表于 2015-7-6 15:32
Thread的port是谁给的值呢,不懂呢socket编程
从1开始,main函数循环启动线程通把liop传递过去 {:5_94:} 哈哈
自己写扫描器,碰到了很多问题,那大神的参考一下
huifu 谢谢 lol 自己写扫描器,碰到了很多问题,那大神的参考一下 lol 端口扫描器如何才能增加代码量 看不懂,6666 看不懂,,,666,,,,,,, 求大神指教 看看 0.0
页:
[1]