Более быстрая обработка функции SendARP

Первоначально опубликовано здесь, но не по теме: 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

Решение

Вы используете вспомогательную функцию из библиотеки «IP Helper». Это не ориентировано на производительность.

Комментарии ServerFault действительно попали в почту: используйте потоки. С <thread> это в наше время довольно просто. Просто сделай 255 std::async вызовы вашей функции. Конечно, убедитесь, что все MacAddr а также PhysAddrLen ссылки не являются недействительными.

0

Другие решения