更快地处理SendARP功能

时间:2014-08-05 20:37:35

标签: c++ windows multithreading synchronization arp

最初发布在这里,但发现不在话题:https://serverfault.com/questions/617459/faster-processing-of-sendarp-function

我想真的回答这个问题。

OC: 我一直在为windows制作网络扫描仪。我已经成功编写了代码,它确实可以正常工作。我的问题是扫描没有启动的主机需要太多时间。当我尝试扫描子网(1到255)时,花了半个多小时!我在互联网上寻找了很多东西,却找不到控制时间限制的功能或控制SendARP功能超时的方法。我在这里提供了一部分代码。请帮忙。

    DestIp = inet_addr(strn.c_str());                   //Setting Destination IPv4       dotted-decimal address into a proper address for the IN_ADDR structure.
    SrcIp = inet_addr(SrcIpString);

    memset(&MacAddr, 0xff, sizeof(MacAddr));                     //Initializing MAC Address to ff-ff-ff-ff-ff-ff

    dwRetVal = SendARP(DestIp, SrcIp, &MacAddr, &PhysAddrLen);                    //Sending ARP request to the destined IP Address

    if (dwRetVal == NO_ERROR) {
        bPhysAddr = (BYTE *)& MacAddr;
        if (PhysAddrLen) {
            std::cout << strn<<std::endl;
            for (int i = 0; i < (int)PhysAddrLen; i++) {
                if (i == ((int)PhysAddrLen - 1))
                    printf("%.2X\n", (int)bPhysAddr[i]);
                else
                    printf("%.2X-", (int)bPhysAddr[i]);
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您正在使用“IP帮助程序”库中的便捷功能。这不是以绩效为导向的。

ServerFault评论实际上击中了头上的邮件:使用线程。 <thread>现在非常简单。只需对您的函数执行255 std::async次调用。当然,请确保所有MacAddrPhysAddrLen引用都不会失效。