扫描网络中开放端口的最快方法



我如何扫描给定的端口号(8000)网络中的说明?
我使用通用插座TCP连接尝试了它。尽管它有效,但如果Alive IP数量超过15,则需要花费大量时间。目标是从给定端口打开的网络中获取IP列表。
这就是我从网络中获取IP列表的方式

    std::vector<std::string> resultIPList;
    FILE* pipe = popen("arp-scan --localnet","r");
    if(!pipe)
    {
        fprintf(stderr,"Unable to open pipe");
        return resultIPList;
    }
    char buffer[128];
    while(!feof(pipe))
    {
        if(fgets(buffer, 128, pipe) != NULL)
        {
            stringBuffer += buffer;
        }
    }
    pclose(pipe);

现在,我的StringBuffer具有IP列表。我写了一个解析器,该解析器从字符串中提取IP,并给我这些IP的向量。现在,我将对给定的端口进行一个一个一个一个一个一个一个一个一个核对的功能。

    struct sockaddr_in client;
    int sock;  
    client.sin_family      = AF_INET;
    client.sin_port        = htons(portNo);
    client.sin_addr.s_addr = inet_addr( Ip.c_str() );
    sock = (int) socket(AF_INET, SOCK_STREAM, 0);
    return (::connect(sock, (struct sockaddr *) &client,sizeof(client)) == 0);

您正在使用错误的程序。只需读取Netstat的输出即可。

使用nmap。

或在循环中,使用非阻止插座调用"连接"到每个端口。保存所有收集的文件描述符,检查他们是否使用" select()"连接;

最新更新