• 黑客编程教程(十四)单线程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();
    
     
    
    }
  • 相关阅读:
    第一部分 android display(sufaceflinger & overlay)
    UML类图关系大全
    第二部分 MediaPlayer的接口与架构
    Climbing Stairs
    Add Binary
    Plus One
    Unique Paths
    Length of Last Word
    Count and Say
    Valid Sudoku
  • 原文地址:https://www.cnblogs.com/rinack/p/3195666.html
Copyright © 2020-2023  润新知