Комментарии 13
К тому же практически все компьютеры при получении ICMP пакета отсылают обратно ответ на него.
Очевидно, что если мы не получаем ответ на ICMP пакет - значит, сервер выключен.
Это давно не так. Могут, но не обязаны. И более того, любой FW по пути может прибить ICMP со словами "не положено"
При отправке он ставится в значение 64 (может отличаться),
Это тоже не так, зависит по умолчанию от ОС и может настраиваться - например тут
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters]
DefaultTTL
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
\Interfaces<InterfaceID>]
int fd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (fd == -1) {
Код стянут с гитхаба, а не написан самостоятельно
https://github.com/br101/pingcheck/blob/master/icmp.c
Первое действие:
man ping
4 COUNT-пинга без остановка клавой Ctrl+C
ping -c 4 google.com
Просто хочу поделиться внезапным (для себя) открытием: пингу можно указать (ключ -I ) какой физический интерфейс использовать независимо от адреса узла назначения.
1. Физический
Биты
Работа со средой передачи, сигналами и двоичными данными
USB, RJ
Зачем вы так с утра?
потому программу нужно запускать через sudo
кажется просто у кого-то руки не доросли - обычный ping как-то же осиливает жить без привелегий.
Да вот не осиливает:
# Ubuntu 18.04
$ ls -l /bin/ping
-rwsr-xr-x 1 root root 64424 Jun 28 2019 /bin/ping
# Ubuntu 22.04
$ ls -l /usr/bin/ping
-rwxr-xr-x 1 root root 72776 Jan 31 2020 /usr/bin/ping
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
обычный ping использует дополнительный трюк для того, что бы работать от непривелигированного пользователя
https://unixetc.co.uk/2016/05/30/linux-capabilities-and-ping/
а вот в общем случае "сырые сокеты", о которых говорится в статье, требуют прав Администратора (Windows) или root (unix-like системы) в любом случае, так как позволяют не только отправлять но и читать напрямую из сетевой карты. Поэтому tcpdump, работающий по этому же принципу, требует sudo или членства в соответствующей группе.
Всемирный интернет работает именно по этой модели.
Ничто в мире не работает по этой модели.Когда-то, когда автор скорее всего ещё не родился, кое-что пыталось, но потерпело абсолютное фиаско в неравном бою с TCP/IP.
И утилита ping как воплощение ICMP является блестящей демонстрацией того, что и “всемирный интернет” кладёт с прибором на эту модель, которая исключает “перепрыгивание” через уровень.
ISO OSI не просто так называют “эталонной” — она прекрасна для теоретизирования, но не для практического применения.
TTL - Time-To-LiVe. Понимать нада однако:)
А мне понравилась наивная фраза "Линукс может просто поставить свою, если мы не обнулим." ). Это видимо речь про неинициализированную структуру, которая забита мусором, это особенность C/C++, линукс тут не при чем.
Второе замечание, зачем использовать макросы там где это не нужно и только запутывает код? Это я про инициализацию структур, можно же написать обычную функцию или написать этот код прямо по месту. Ох уж эти сишники...
Принцип работы утилиты ping в Linux