• 黑客编程教程(十四)单线程TCP端口扫描器


    #include<winsock2.h> 
    #include<stdio.h>
    
    #include <time.h>                           //计时需要用到的头文件
    
    #pragma comment(lib,"ws2_32.lib")
    
     
    
    #include <time.h> //计时需要用到的头文件
    
    clock_t start,end; //程序运行的起始和结束时间
    
    float costtime; //程序耗时
    
    void usage(void)
    
    {
    
    printf("	usage: tcpscan RemoteIP StartPort-EndPort
    ");
    
    printf("	Example: tcpscan 192.168.1.1 80-100
    ");
    
    }
    
     
    
    int main(int argc,char **argv)
    
    {
    
    char *host;
    
    int startport,endport;
    
         char *p;
    
    if(argc!=3)
    
    {
    
    usage();
    
    return 0;
    
    }
    
     
    
    p=argv[2]; //处理端口参数
    
         if(strstr(argv[2],"-"))
    
         {    
    
    startport=atoi(argv[2]);
    
             for(;*p;)
    
                 if(*(p++)=='-')break;
    
             endport=atoi(p);
    
            
    
             if(startport<1 || endport>65535)
    
             {    
    
    printf("Port Error!
    ");
    
                 return 0;
    
             }
    
     
    
         }
    
     
    
     
    
    host=argv[1];
    
     
    
         WSADATA ws;
    
    SOCKET s;
    
    struct sockaddr_in addr;
    
    int result;
    
    long lresult;
    
     
    
    lresult=WSAStartup(MAKEWORD(1,1), &ws);
    
     
    
    addr.sin_family =AF_INET;
    
    addr.sin_addr.s_addr =inet_addr(host);
    
     
    
         start=clock(); //开始计时
    
     
    
    for (int i=startport;i<endport;i++)
    
    {
    
    s=socket(AF_INET, SOCK_STREAM, 0);
    
             addr.sin_port = htons(i);
    
    if(s==INVALID_SOCKET)break;
    
    result=connect(s, (struct sockaddr*)&addr,sizeof(addr)); 
    
    if(result==0)
    
    {
    
    printf("%s %d
    ",host,i);
    
    closesocket(s);
    
     
    
    }
    
     
    
    }
    
    end=clock(); //计时结束
    
    costtime= (float)(end - start) / CLOCKS_PER_SEC;   //转换时间格式
    
    printf("Cost time:%f second",costtime); //显示耗时
    
    WSACleanup();
    
     
    
    }
  • 相关阅读:
    Java5 多线程实践
    ExtJS2.0实用简明教程 Border区域布局
    MySQL安装图解
    ExtJS2.0实用简明教程 组件的使用
    ExtJS2.0实用简明教程 ExtJS版的Hello
    Linux操作系统中如何安装Tomcat
    线程池的介绍及简单实现
    ExtJS2.0实用简明教程 获得ExtJS
    汽车常识全面介绍 动力系统
    MySQL 图形化管理工具介绍
  • 原文地址:https://www.cnblogs.com/rinack/p/3195666.html
Copyright © 2020-2023  润新知