Comments 8
Честно говоря не понял, а зачем вообще это нужно? Чем не нравится уже работающие реализации?
Стрипать надо не через "-ldflags "-s -w" ", а просто утилитой strip, так обычно бинарник меньше выходит (и это официально поддерживается).
Я совсем не программист, но нужна была похожая реализация для мониторинга большого количества устройств со сбором дополнительной статистики. Сделал используя библиотеку pro-bing и основная проблема в том, что запуская сотни горутин на слабом железе, мы получаем RTT и stddev отличающийся от обычного одиночного пинга на десятки миллисекунд, что иногда критично и выглядит не сильно красиво. Я так понимаю, что это происходит из-за реализации подсчета RTT через time.Since и времени на переключение контекста между разными горутинами. Тестировали ли вы этот момент?
Как можно оптимизировать это и получать RTT близкий к одиночному пингу не закидывая все железом с большим количеством CPU?
По коду, думаю, в некоторых местах можно if/else поменять на if/early_return для читаемости и некоторые части вынести в функции с именем по контексту действий. А так очередной ping, каких много. Можно было сделать массовый «ping-mass» или ping-db как хранилище данных. Вообще есть проект GNU coreutils на golang https://github.com/ericlagergren/go-coreutils, правда, заброшенный, но, может, кому-то будет интересен. На Rust аналогичный проект активно развивается.
На винде что-то не работает
Golang славится своей многопоточностью. Если бы вы реализовали аналог fping - цены бы вам не было.
Если на сервере отключён IPv6, как класс (в /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"), то fping не работает даже с указанием ключа -4
$ sudo fping -4 -g 192.168.3.0/24
(null): can't create raw socket (must run as root?) : Address family not supported by protocol
У меня, как у админа, выбор:
или мягче отключить IPv6 с сохранением стека, но без адресов - ipv6.disable_ipv6=1
или заменить fping на другое
Information
- Website
- yadro.com
- Registered
- Founded
- Employees
- 5,001–10,000 employees
- Location
- Россия
- Representative
- Ульяна Соловьева
Пишем ping на Go: сможем ли составить конкуренцию стандартному ping?