char *SendData = "Data Buffer";
LPVOID ReplyBuffer;
ReplyBuffer = (VOID*) malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
if ((dwRetVal = IcmpSendEcho(hIcmpFile,
inet_addr("123.456.789.0"),
SendData, sizeof(SendData),
NULL, ReplyBuffer,
sizeof(ReplyBuffer) + sizeof(ICMP_ECHO_REPLY),
1000)) != 0) {
printf("\tReceived %ld messages.\n", dwRetVal);
printf("\tMessage: %s\n", ReplyBuffer);
}
else {
printf("\tCall to IcmpSendEcho() failed.\n");
printf("\tError: %ld\n", GetLastError());
}
Запоздалое чтение с командной строки.
У меня такая проблемка : мне нужно пропинговать удаленный компьютер и понять , активен он или нет.
Я пишу :
error = system(PingString);
if (error!=0)
{
return -2;
}
scanf("%s",ResultString);
scanf("%s",ResultString);
scanf("%s",ResultString);
scanf("%s",ResultString);
flag = CheckPing(ResultString);
scanf("%s",ResultString);
Хочется считать четвертую строку из тех ,которые он вывел на экран , но вместо этого прога предлагает ввести новые строки.
Как сделать , чтобы строки , которые комп пишет сразу же после вызова pingа можно было считать?
Заранее спасибо.
Как сделать , чтобы строки , которые комп пишет сразу же после вызова pingа можно было считать?
[/QUOTE]
-можно тупо перенаправить пинг в файл и читать из него текст
А не подскажете как это сделать?
Зачем исспользовать внешнюю программу если все можно реализовать программно. Например есть функции для работы с ICMP запросами используемыми в ping. IcmpSendEcho, IcmpSendEcho2.
Вот вам код:
Код:
Описана в Icmpapi.h
Можно вобще через Raw sockets вручную написать ICMP взаимодействие с удаленным хостом. Если интересует могу привести код :))
Спасибо большое! Завтра попробую!
Зачем исспользовать внешнюю программу если все можно реализовать программно. Например есть функции для работы с ICMP запросами используемыми в ping. IcmpSendEcho, IcmpSendEcho2.
Вот вам код:
Код:
char *SendData = "Data Buffer";
LPVOID ReplyBuffer;
ReplyBuffer = (VOID*) malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
if ((dwRetVal = IcmpSendEcho(hIcmpFile,
inet_addr("123.456.789.0"),
SendData, sizeof(SendData),
NULL, ReplyBuffer,
sizeof(ReplyBuffer) + sizeof(ICMP_ECHO_REPLY),
1000)) != 0) {
printf("\tReceived %ld messages.\n", dwRetVal);
printf("\tMessage: %s\n", ReplyBuffer);
}
else {
printf("\tCall to IcmpSendEcho() failed.\n");
printf("\tError: %ld\n", GetLastError());
}
LPVOID ReplyBuffer;
ReplyBuffer = (VOID*) malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
if ((dwRetVal = IcmpSendEcho(hIcmpFile,
inet_addr("123.456.789.0"),
SendData, sizeof(SendData),
NULL, ReplyBuffer,
sizeof(ReplyBuffer) + sizeof(ICMP_ECHO_REPLY),
1000)) != 0) {
printf("\tReceived %ld messages.\n", dwRetVal);
printf("\tMessage: %s\n", ReplyBuffer);
}
else {
printf("\tCall to IcmpSendEcho() failed.\n");
printf("\tError: %ld\n", GetLastError());
}
Описана в Icmpapi.h
Можно вобще через Raw sockets вручную написать ICMP взаимодействие с удаленным хостом. Если интересует могу привести код :))[/QUOTE]
так это WinApi функция , а есть что-нибудь похожее под Linux?
Если надо независимое от винды - то открывай сокет:
socket (AF_INET,SOCK_RAW,IPPROTO_ICMP);
и дальше пиши в него и читай по ICMP протоколу. Описание протокола есть в инете - оно не сложное.
Если не сможешь могу потом когд подсказать - сейчас занят немного.
вот классическая реализация ping через RAW_SOCKET'ы
В итоге я просто сделал system("ping ..... > Ping.txt") и читал то , что нужно из файла.
Всем большое спасибо!
P.S. Про Raw_Socket'ы я все же почитаю=))
Используй pipe.
Или можно читать stdin, запустив подрят два приложения: ping |myprog
А вообще-то для того, чтобы вырезать что-то из stdout не надо ничего писать своего, достаточно использовать grep и sed.
Или можно читать stdin, запустив подрят два приложения: ping |myprog
QUOTE]
А как это делать? Я где-то уже видел такое , но не понял , что имеется в виду...
Это так весь stdout первой программы переводишь на stdin второй
Для вас это может и просто=)) А как это хоть примерно в коде выглядит?
Это не в коде. Это из консоли так две программы запускаются. В коди конечно тоже можно запустить при желании - так же через system =))
Так мне то нужно в коде=) чтобы все автоматически работало и не надо было ничего самому делать.....
А это я просто расшифровал что значит ping |myprog :)
Тогда используй pipe.
В форуме неоднократно обсуждались.
А это я просто расшифровал что значит ping |myprog :)[/QUOTE]
ААА , а я сразу не понял=)
В общем спасибо еще раз!:)