一个包含详细注释的扫描器C源代码

s扫描源代码----扫描软件 经典的扫描软件代码!!!!!我试验过可以用的...不过中间有的地方要靠自己调试....... ______________________________________ 立即下载
#include <stdio.h>
#include <winsock2.h>
#include <time.h>
#define iPort 80//目标Web Server端口
.#define szSign "500 13/r/nServer: Microsoft-IIS/5.0"//根据此标志来检查目标是否有漏洞
#pragma comment(lib,"ws2_32.lib")
///////////////////////////////////////////////////////////////////////////
//
//定义&初始化全局变量
char *SendBuff="GET /NULL.printer/n",//发送的请求buff
CurrentTarget[52]={0},//存放最后一个线程将扫描的目标
turn[4][2]={"-","//","|","/"};//显示进度时的字符
int SendBuffLen=strlen(SendBuff),//发送的buff长度
iConnTimeout,//TCP Connect TimeOut
ii=0,//扫描进度
    iTotal;//服务器总数
HANDLE hSemaphore=NULL,//信标内核对象句柄,用来控制线程数量
       hStdout;//console标准输出句柄,做进度显示的时候用的
struct timeval timeout;//连接、发送和接收的超时值
DWORD SleepTime;//每个一个线程后等待的时间
    /*
SleepTime值根据用户输入的线程数量[ThreadNum]和TCP ConnectTimeOut[CONNTIMEO]来计算。确保在CONNTIMEO时间左右开ThreadNum个线程。这样在CONNTIMEO时间后,所开的线程开始陆续超时退出,可以继续稳定的开线程,可以有效的保证同时有ThreadNum个线程在运行。
*/
///////////////////////////////////////////////////////////////////////////
void ShowError(char *);//显示出错信息函数
BOOL ResetCursor(void);//重置光标位置,线程输出的时候调用的
DWORD WINAPI ShowProInfo(LPVOID);//显示进度信息
DWORD WINAPI scan(LPVOID);//扫描函数
void usage(char *);//帮助函数
///////////////////////////////////////////////////////////////////////////
int main(int argc,char **argv)
{
    HANDLE hThread=NULL;//线程句柄
    DWORD dwThreadID;//线程ID
    struct sockaddr_in sa;
    int i,
       MaxThread;//最大线程数量
    WSADATA    wsd;
    long PreviousCount;
    clock_t start,end;//程序运行的起始和结束时间
    double duration;
    //检查用户输入参数
    if(argc!=5)
    {
       usage(argv[0]);
       return 1;
    }
    //get target range
    int StartNet=inet_addr(argv[1]);
    int StopNet=inet_addr(argv[2]);
    int StartHost=ntohl(StartNet);
    int StopHost=ntohl(StopNet);
    //取得线程数量
    MaxThread=atoi(argv[3]);
    //取得conn超时时间
    iConnTimeout=atoi(argv[4]);
    //检查参数合法性
    if((iConnTimeout>6) || (iConnTimeout<2) || (MaxThread<1) || (MaxThread>500) || (StopHost<StartHost))
    {
       usage(argv[0]);
       return 1;
    }
    //计算时间
    SleepTime=1000*iConnTimeout/MaxThread;
    //设置连接超时值
    timeout.tv_sec = iConnTimeout;
    timeout.tv_usec =0;
    __try
    {
       //开始计时
       start=clock();
       //加载winsock库
       if (WSAStartup(MAKEWORD(1,1), &wsd) != 0)
       {
           ShowError("WSAStartup");
           __leave;
       }
       //创建信标内核对象句柄
       hSemaphore=CreateSemaphore(NULL,MaxThread,MaxThread,NULL);
       if(hSemaphore==NULL)
       {
           ShowError("CreateSemaphore");
           __leave;
       }
       //取得console标准输出句柄
       hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
       if(hStdout==INVALID_HANDLE_VALUE)
       {
           ShowError("GetStdHandle");
           __leave;
       }
       //设置目标总数
       iTotal=StopHost-StartHost;
       //创建进度显示线程
       hThread=CreateThread(NULL,0,ShowProInfo,NULL,0,&dwThreadID);
       if(hThread==NULL)
       {
           ShowError("1 CreateThread");
           __leave;
       }
//关闭句柄
       CloseHandle(hThread);
       //循环创建扫描线程
       for(i=StartHost;i<=StopHost;i++)
       {
           //等待信标内核对象通知
           WaitForSingleObject(hSemaphore,INFINITE);
           //create thread to scan
           hThread=CreateThread(NULL,0,scan,(LPVOID)i,0,&dwThreadID);
           if(hThread==NULL)
           {
              ShowError("2 CreateThread");
              break;
           }
           //进度自加1
           ii++;
           //重设最后一个线程扫描的目标
           sa.sin_addr.s_addr=htonl(i);
           strncpy(CurrentTarget,inet_ntoa(sa.sin_addr),sizeof(CurrentTarget));
          //休息一会儿 )
           Sleep(SleepTime);
           //关闭线程句柄
           CloseHandle(hThread);
       }
       //等待所有线程结束
       while(1)
       {
           WaitForSingleObject(hSemaphore,INFINITE);
           if(!ReleaseSemaphore(hSemaphore,1,&PreviousCount))
           {
              ShowError("main() ReleaseSemaphore");
              Sleep(5000);
              break;
           }
           if(PreviousCount==(MaxThread-1))
           {
              printf("/nAll done.");
              break;
           }
           Sleep(500);
       }
    }//end of try
    //搞定,清场,收工
    __finally
    {
       //计时结束
       end=clock();
       //转换时间格式
       duration = (double)(end - start) / CLOCKS_PER_SEC;
       //显示所用时间
       printf("/n/nComplete.Scan %d targets use %2.1f seconds.Speed %0.3g/s/n",iTotal,duration,iTotal/duration);
       //关闭句柄
       CloseHandle(hStdout);
       CloseHandle(hSemaphore);
       WSACleanup();
    }
    return 0;
}
///////////////////////////////////////////////////////////////////////////
//
//回显错误信息函数
//
void ShowError(char *msg)
{
    MessageBox(NULL,msg,"ERROR",0);
    //printf("/n%s failed:%d",GetLastError());
}
//////////////////////////////////////////////////////////////////////////
//
//重置光标位置函数,以便扫描线程输出结果
//
BOOL ResetCursor()
{
    CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
    //取得当前光标位置
    if(!GetConsoleScreenBufferInfo(hStdout,&ConsoleScreenBufferInfo))
    {
       ShowError("GetConsoleScreenBufferInfo");
       return FALSE;
    }
    //设置光标X坐标为0
    ConsoleScreenBufferInfo.dwCursorPosition.X=0;
    //设置当前光标位置
    SetConsoleCursorPosition(hStdout,ConsoleScreenBufferInfo.dwCursorPosition);
    return TRUE;
}
///////////////////////////////////////////////////////////////////////////
//
//显示进度信息函数
//
DWORD WINAPI ShowProInfo(LPVOID lp)
{  
    int j,k;
    CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
    float m;
    for(j=0;ii<iTotal;j++)
    {
       //休息一会儿 ))
       Sleep(SleepTime);
       //取得当前光标位置
       if(!GetConsoleScreenBufferInfo(hStdout,&ConsoleScreenBufferInfo))
       {
           ShowError("GetConsoleScreenBufferInfo");
           return 1;
       }
       //设置百分比进度显示的X坐标
       ConsoleScreenBufferInfo.dwCursorPosition.X=0;
       //设置当前光标位置
       SetConsoleCursorPosition(hStdout,ConsoleScreenBufferInfo.dwCursorPosition);
       //已经完成的百分比
       m=(ii+1)*100.00/iTotal;
       //显示进度
       if(ii==iTotal)
       {
           printf("******** 100%% Wait %d seconds to exit ********       /n",iConnTimeout);
           break;
       }
       else
       {
           k=j%4;
           printf("%-15s %s [%d/%d] %s %%%0.3g",CurrentTarget,turn[k],ii,iTotal,turn[k],m);
       }
    }//end of for
    return 0;
}
///////////////////////////////////////////////////////////////////////////
//
//扫描函数
//
DWORD WINAPI scan(LPVOID lp)
{
    int i=(int)lp,iErr;
    struct sockaddr_in server;
    SOCKET s=INVALID_SOCKET;
    char RecvBuff[1024]={0},*ptr;
    int RecvBuffLen=sizeof(RecvBuff);
    u_long ul=1;//初始化为为非0值
  fd_set r,w;
    //create socket
    s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s==INVALID_SOCKET)
    {
       printf("/nCreate socket failed:%d",GetLastError());
       ExitProcess(1);
    }
    //fill the addr struct
    server.sin_family=AF_INET;
    server.sin_port=htons(iPort);
    server.sin_addr.S_un.S_addr=htonl(i);
    __try
    {
       //设置socket为非锁定模式,ul为0值的话,那么soocket将被设置为锁定模式
       iErr=ioctlsocket(s,FIONBIO,(unsigned long*)&ul);
       if(iErr==SOCKET_ERROR )
       {
           ResetCursor();
           ShowError("ioctlsocket");
           ExitProcess(1);
       }
       //printf("/n%X ioctl ok.strat conn",i);
       //connect to target
       connect(s,(struct sockaddr *)&server,sizeof(server));
       //printf("/n%X conn return,start select w",i);
       //设置select参数
       FD_ZERO(&w);
       FD_SET(s, &w);
       //等待connect成功&socket可写
       iErr=select(0, 0, &w, 0, &timeout);
       //printf("/n%X select w return %d",i,iErr);
       //等待返回后,socket仍不可写则退出
       if((iErr==SOCKET_ERROR) || (iErr==0))
       {
           //printf("/n%X select return w err,exit",i);
           __leave;
       }
       //socket可写则继续
       else
       {
           //send buff to target
           //printf("/n%X send",i);
           iErr=send(s,SendBuff,SendBuffLen,0);
           //printf("/n%X send return",i);
           if(iErr==SOCKET_ERROR)
              __leave;
       }
       //等待socket可读
       FD_ZERO(&r);
       FD_SET(s, &r);
       //printf("/n%X start select r",i);
       iErr=select(0, &r, 0, 0, &timeout);
       //printf("/n%X select r return %d",i,iErr);
       if((iErr==SOCKET_ERROR) || (iErr==0))
       {
           //printf("/n%X select r err,exit",i);
           __leave;
       }
       else
       {
           //recv buff from target
           //printf("/n%X start recv",i);
           iErr=recv(s,RecvBuff,RecvBuffLen,0);
           //printf("/n%X recv ret",i);
           if(iErr==SOCKET_ERROR)
              __leave;
       }
       //verify buff
       ptr=strstr(RecvBuff,szSign);
       if(ptr!=NULL)
       {
           //线程输出前要先调用ResetCursor函数
           ResetCursor();
           //输出信息后务必加一个以上换行符号,输出前请别加换行符号,以免显示混乱
           printf("[%-15s] has .printer mapped.        /n",inet_ntoa(server.sin_addr));
       }
    }
    __finally
    {
       if(!ReleaseSemaphore(hSemaphore,1,NULL))
           ShowError("thread ReleaseSemaphore failed");
       closesocket(s);
    }
    return 0;
}
///////////////////////////////////////////////////////////////////////////
void usage(char *proname)
{
    printf("/n%s v0.1 only can find IIS5 .Printer mapped"
       "/nPower by ey4s<[email]ey4s@21cn.com[/email]> 2001.5.20"
       "/nhttp://www.patching.net"
       "/n/nUsage:%s <StartIP> <EndIP> <ThreadNum> <CONNTIMEO>"
       "/n/nNotice"
       "/n    StartIP StopIP ==>Don‘t forgot StopIP must large than StartIP "
       "/n    ThreadNum ==>Thread number,please input between 1-500"
       "/n    CONNTIMEO ==>TCP connect timeout,please input between 2-6"
       "/n/nExample"
       "/n    %s 192.168.0.0 192.168.255.255 200 2",proname,proname,proname);
} 
 
s扫描器源代码 支持2中方式 s扫描器源代码 支持2中方式 tcp syn 都非常好用 立即下载

相关推荐

s扫描器c语言源代码

s扫描器C语言源代码 typedef struct _iphdr { unsigned char h_lenver; //4位首部长度+4位IP版本号 unsigned char tos; //8位服务类型TOS unsigned short total_len; //16位总长度(字节) unsigned short ident; //16位标识 unsigned short frag_and_flags; //3位标志位 unsigned char ttl; //8位生存时间 TTL unsigned char proto; //8位协议 (TCP, UDP 或其他) unsigned short checksum; //16位IP首部校验和 unsigned int sourceIP; //32位源IP地址 unsigned int destIP; //32位目的IP地址 }IP_HEADER; typedef struct _tcphdr //定义TCP首部 { USHORT th_sport; //16位源端口 USHORT th_dport; //16位目的端口 unsigned int th_seq; //32位序列号 unsigned int th_ack; //32位确认号 unsigned char th_lenres; //4位首部长度/6位保留字 unsigned char th_flag; //6位标志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位校验和 USHORT th_urp; //16位紧急数据偏移量 }TCP_HEADER;

一个包含详细注释的扫描器C源代码(转)

#include #include #include #define iPort 80//目标Web Server端口 .#define szSign "500 13/r/nServer: Microsoft-IIS/5.0"//根据此标志来检查目标是否有漏洞 #pragma comment(lib,"ws2_32.lib") ////////////////////////////////

要饭's Blog 1498

C语言实现文件扫描

用C语言实现文件夹的扫描,使用递归,并占用较少的资源。

基于C和Python编程实现源代码的软件同源性分析与漏洞检测系统

Miller等[基于二进制分析平台Bitblaze开发了一套异常判定工具,通过对程序执行路径进行追踪获取和异常相关的信息,并检查异常指令是否能被程序输入影响,提高了异常可利用性判定的精确度,但是它利用虚拟机仿真技术,开销很大,同时,能被输入控制的指令不一定在异常指令附近,并且可能会相距很远,依然会产生很多漏报的可用异常。基于树的方法采用语法树或抽象语法树产生源代码描述,文件比对通过语法树或抽象语法树中子树的匹配来评估[1], 子树的信息可以进一步生产指纹信息,通过指纹信息的比对,形成可能存在的克隆点。

毕业作品网站 1173

易语言GUI版S扫描器

易语言GUI版S扫描器源码,GUI版S扫描器,设置所有,API过虑,取信息表,取信息长

ST7789T3与CST816D驱动全解析,面试技巧第11篇:嵌入式面试场景问答 10 连发。

SPI模式下,SCLK、MOSI、CS、DC、RST为必需引脚;8080模式下需连接D0-D7、WR、RD等信号线。CST816D触摸芯片通常通过I2C接口通信,需连接SCL、SDA及INT(中断)引脚。确保电源引脚(VCC、GND)稳定供电,ST7789T3典型工作电压为3.3V。显示异常时检查时序参数,如SPI时钟频率(建议≤40MHz)、数据建立时间。初始化流程需发送一系列命令序列,包括设置像素格式、扫描方向、帧率控制等。扫描方向(MADCTL)可调整显示旋转角度,需根据实际硬件布局配置。

a967gsvj的博客 375

一个包含详细注释的扫描器C源代码(转) [z]

#include #include #include #define iPort 80//目标Web Server端口 .#define szSign "500 13/r/nServer: Microsoft-IIS/5.0"//根据此标志来检查目标是否有漏洞 #pragma comment(lib,"ws2_32.lib") //////////////////////////////

Harper(哈勃)的专栏 640

IAR for ARM 搭建STM32F103C8T6工程模板(实战指南)

本文详细介绍了如何在IAR for ARM开发环境中为STM32F103C8T6微控制器搭建完整的工程模板。从环境准备、固件库获取、目录结构设计到工程配置与编译调试,提供了实战指南和常见问题解决方案,帮助开发者快速建立稳定的STM32开发环境。

fun88的博客 990

[转载]一个包含详细注释的扫描器C源代码

#include #include #include #define iPort 80//目标Web Server端口 .#define szSign "500 13/r/nServer: Microsoft-IIS/5.0"//根据此标志来检查目标是否有漏洞 #pragma comment(lib,"ws2_32.lib") ////////////////////////////////

qwer_boo 的专栏 585

【STM32实战】利用STM32CubeMX配置PWM互补输出驱动电机

本文详细介绍了如何利用STM32CubeMX配置STM32高级定时器的PWM互补输出功能,以驱动电机等需要半桥/全桥电路的应用。通过图形化界面设置定时器参数、使能互补通道并配置关键的死区时间,结合代码示例演示了如何启动PWM输出和动态调整占空比,确保输出安全、精确的互补信号,避免MOS管直通风险,提升驱动可靠性。

weixin_29161785的博客 536

【PMP认证考试之个人总结】第 4 章 项目范围管理

第 4 章 项目范围管理 4.1 综述   1.产品范围和项目范围的区别 ①产品范围:某项产品、服务或成果所具有的特性和功能; ②项目范围:为交付具有规定特性与功能的产品、服务或成果而必须完成的工作; 2.收集需求、定义范围和创建WBS输出的区别 ①收集需求 ===> 需求跟踪矩阵; ②定义范围 ===> 项目范围说明书;

qq296398300的博客 2894

去除c中的注释

mengyuan10的专栏 1186

DNA pull-down技术避坑指南:从探针设计到质谱验证的完整实验方案

本文提供了一份详尽的DNA pull-down技术实战避坑指南,涵盖从探针设计、生物素标记、磁珠选择与预处理,到结合洗脱优化及下游质谱验证或Western Blot验证的全流程。重点解析了如何通过精细操作降低非特异性结合、提高实验特异性与重复性,并对比了质谱与WB两种验证路径的适用场景,旨在帮助研究者构建稳健可靠的DNA-蛋白质互作研究体系。

weixin_29274337的博客 495

编译原理【实验1——扫描器的设计与实现】

编译原理【实验1——扫描器的设计与实现】

upward 8808

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2189

Centos7 yum 报错「Errno 256」No more mirrors to try 解决方法

首先该问题的出现是由于网络的震荡导致,这是重点。(1)将源更换成阿里云的官方源,步骤参考如上(2)同时将zabbix的官方源更换成阿里云里面的zabbix镜像源,因为zabbix官方源根本网络不通,因为国家防火墙的拦截,导致网络不通。这是阿里源的zabbix镜像地址: https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/修改系统中早期生成的zabbix.repo文件,如下:主要是把baseurl替换成阿里云的zabbix镜像地址即可。

专注基础架构领域 3876

80端口入侵 CGI扫描器的原理和实现过程(转)

很多网站为了安全起见,在WEB Server懊婕芰朔阑鹎剑 蛘咦隽薚CP/IP过滤,对外只开放TCP 80 端口。从入侵者角度来看,要入侵那么从80上跑的CGI入手是比较可行的,当然也可以用别的办法,例如旁敲侧击,呵呵。从网管角...

cuijianli8434的博客 1980

浏览器主页被2345劫持简单处理方法

本人比较常用的浏览器是IE和Chrome IE: 将网址修改为https://www.baidu.com 应用-确定-重新打开IE浏览器 或者win+r运行regedit打开注册表找到这个值   HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下  和HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main这个下面的StartPage ...

A soul tortured by desire 2万+

编译原理删除c语言注释,删除C语言源程序文件中的所有注释

#include #include #include #define STR_LEN 400void main(){FILE *fpr, *fpw;char ch, strline[STR_LEN + 1];int i=0,p=0,q=0;bool bFind = false, bEnd = false;if ((fpr=fopen("c:\\c.c","r")) == NULL){printf(...

weixin_32667955的博客 505

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 一款木马的分析
下一篇: wowocock的Callback Ring3
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值