0

如何扫描网络中的给定端口号(8000)?
我尝试使用通用套接字 tcp 连接。虽然它可以工作,但如果活动 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 的向量。现在我将针对给定的端口一一扫描它们。下面的功能适用于 Windows,在 linux 中我使用 boost::asio 做同样的事情

    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);
4

2 回答 2

0

你使用了错误的程序。只需阅读 netstat 的输出。

于 2014-01-21T23:26:20.913 回答
0

使用纳米地图。

或者在一个循环中,使用非阻塞套接字调用“连接”到每个端口。保存您收集的所有文件描述符,检查它们是否使用“select()”连接;

于 2014-01-21T23:44:07.210 回答