马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 迷雾少年 于 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 int USHORT;
typedef void* LPVOID;
/* 类型定义 */
/* 函数定义 */
void Thread (USHORT Port); /* 线程函数 */
int PortScan(USHORT Port); /* 端口扫描 检测某个IP的端口是否正常*/
void Startup(); /* 初始化SOCKET环境 */
void Endup (); /* 全部线程完成 */
/* 函数定义 */
/* 文件 Main.C */
#include "Hander.h"
char IpAddress[100] = {0};
void Thread(USHORT Port)
{
char number[10]={0};
char title[20] = {"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:
完整文件下载: |