어떻게 ICMP를 사용하여 서브넷 주소를 얻을 수 있는지 이해하려고합니다. Wikipedia (다른 출처에도 있음)에는 메시지 예제가 있지만 찾을 수 있었던 것은이 메시지와 아무 관련이 없습니다.Icmp 서브넷 주소 요청
IcmpSendEcho (msdn example)를 사용해 보았습니다. 그러나 그것이 틀린 경우에만 ping 기능을 수행하고 수정 해주는 것처럼 보였습니다.
몇 가지 코드 예 (c/C++)를 줄 수 있습니까, 아니면 링크 일 수 있습니까?
편집 : 내가 사용
코드 :
int __cdecl main() {
// Declare and initialize variables
HANDLE hIcmpFile;
unsigned long ipaddr = INADDR_NONE;
DWORD dwRetVal = 0;
char SendData[12] = "Data Buffer";
LPVOID ReplyBuffer = NULL;
DWORD ReplySize = 0;
ipaddr = inet_addr("217.71.130.248");
hIcmpFile = IcmpCreateFile();
if (hIcmpFile == INVALID_HANDLE_VALUE) {
printf("\tUnable to open handle.\n");
printf("IcmpCreatefile returned error: %ld\n", GetLastError());
return 1;
}
ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData);
ReplyBuffer = (VOID*)malloc(ReplySize);
if (ReplyBuffer == NULL) {
printf("\tUnable to allocate memory\n");
return 1;
}
dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData),
NULL, ReplyBuffer, ReplySize, 1000);
if (dwRetVal != 0) {
PICMP_ECHO_REPLY pEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer;
struct in_addr ReplyAddr;
ReplyAddr.S_un.S_addr = pEchoReply->Address;
printf("\tSent icmp message to %s\n", "217.71.130.248");
printf("\tReceived %ld icmp message response\n", dwRetVal);
printf("\tInformation from this response:\n");
printf("\t Received from %s\n", inet_ntoa(ReplyAddr));
printf("\t Status = %ld\n",
pEchoReply->Status);
printf("\t Roundtrip time = %ld milliseconds\n",
pEchoReply->RoundTripTime);
}
else {
printf("\tCall to IcmpSendEcho failed.\n");
printf("\tIcmpSendEcho returned error: %ld\n", GetLastError());
return 1;
}
return 0;
}
내가 확실히 작동하는 IP에서 답을 얻을. 하지만 서브넷 주소를 가져야하고 그 주소가 필요합니다.
코드를 게시하십시오. – GingerPlusPlus
책, 도구, 소프트웨어 라이브러리, 자습서 또는 기타 오프 사이트 리소스를 추천하거나 찾도록 요청하는 질문은 독단적 인 답변과 스팸을 끌어 들이기 때문에 스택 오버플로에 대해 주제를 벗어났습니다. 대신 문제를 설명하고 지금까지 해결 된 문제를 설명하십시오. –