Я использовал ниже код. Он работает, но в режиме отладки в Visual Studio, если вы остановите отладку, компьютер дал синий экран, поэтому это не полезно. Я провел некоторое исследование, и я обнаружил, что это обычная ошибка для icmpapi. Есть ли способ пингования компьютера C++?Как я могу ping удаленный компьютер на моем компьютере с Windows с C++?
#include <winsock2.h>
#include <iphlpapi.h>
#include <icmpapi.h>
//Declare and initialize variables
HANDLE hIcmpFile;
unsigned long ipaddr = INADDR_NONE;
DWORD dwRetVal = 0;
DWORD dwError = 0;
char SendData[] = "Data Buffer";
LPVOID ReplyBuffer = NULL;
DWORD ReplySize = 0;
QByteArray ipArray = computerIt->GetIP().toLocal8Bit();
const char *hostIP = ipArray.data();
ipaddr = inet_addr(hostIP);
if (ipaddr == INADDR_NONE)
{
EventLogger::LogMessage(true, "<%s> Computer in <%s> Computer Group, IP initialization failed. (inet_addr(hostIP))", computerIt->GetName().toUtf8().constData(), computerGroupIt->GetName().toUtf8().constData());
break;
}
hIcmpFile = IcmpCreateFile();
if (hIcmpFile == INVALID_HANDLE_VALUE)
{
EventLogger::LogMessage(true, "<%s> Computer in <%s> Computer Group, IcmpCreatefile returned error", computerIt->GetName().toUtf8().constData(), computerGroupIt->GetName().toUtf8().constData());
break;
}
// Allocate space for at a single reply
ReplySize = sizeof (ICMP_ECHO_REPLY) + sizeof (SendData) + 8;
ReplyBuffer = (VOID *) malloc(ReplySize);
if (ReplyBuffer == NULL)
{
EventLogger::LogMessage(true, "<%s> Computer in <%s> Computer Group, unable to allocate memory for reply buffer", computerIt->GetName().toUtf8().constData(), computerGroupIt->GetName().toUtf8().constData());
break;
}
// Starting pinging
dwRetVal = IcmpSendEcho2(hIcmpFile, NULL, NULL, NULL,
ipaddr, SendData, sizeof (SendData), NULL,
ReplyBuffer, ReplySize, 1000);
if (dwRetVal == 0)
{
computerIt->SetAliveStatus(false);
}
else
{
computerIt->SetAliveStatus(true);
}
Вы должны создать сокеты (который ограничивается только администраторами) и самостоятельно внедрять ICMP. Цель ICMPAPI MS - это обработать это для вас, удалив ограничение администратора. Не могли бы вы привести источники, утверждающие, что это известная ошибка в icmpapi? –
https://social.msdn.microsoft.com/Forums/vstudio/en-US/c0d616a2-a1ea-43fb-831c-b1f51a957639/icmpsendech-blue-screen это показывает ошибку! Как я могу реализовать RAW-сокет, это настолько сложно, что вы можете показать мне пример! – EmreS