最初发布在这里,但发现不在话题: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]);
}
}
}
答案 0 :(得分:0)
您正在使用“IP帮助程序”库中的便捷功能。这不是以绩效为导向的。
ServerFault评论实际上击中了头上的邮件:使用线程。 <thread>
现在非常简单。只需对您的函数执行255 std::async
次调用。当然,请确保所有MacAddr
和PhysAddrLen
引用都不会失效。