|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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:
完整文件下载: |
-
评分
-
查看全部评分
|