На всякий случай отстальная часть кода (к логике работы самого icmp не относится). #include <error.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/utsname.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include <stdio.h> #include <resolv.h> #include <netinet/ip_icmp.h> #define PACKETSIZE 64 void usage() { printf("USAGE:\t prog_name <IP_address>\n"); exit(1); } int main(int argc, char *argv[]) { if(argv[1] == NULL) usage(); if (ping(argv[1]) > 0) printf("PING\t\tOK\n"); else printf("PING\t\tNO_ANSWER\n"); return 0; } 2014-11-21 14:15 GMT+01:00 Alex Naumov <alexander_naumov@opensuse.org>:
Всем привет.
Начнем потихоньку? Вот [1] пример функции, которая отправляет 4 ICMP запроса (raw-сокет). В качестве аргумента передаем ей строку с IP адресом. Если получено больше одного ответа, то функция возвращает положительный ответ. Предпологается, что функция используется по аналогии с ping(8).
Кто что думает об этом коде? Что можно улучшить?
Мне вот интересно, сколько по-вашему стоит получить ответов, чтобы быть уверенным, что сеть работет без проблем и задержка с ответами не слишком большая?
Кто-нибудь может ясно объяснить, почему для корректной работы он требует права root?
Alex