Re: [Network] Простой ICMP запрос

Denis Kirjanov kirjanov at gmail.com
Sat Nov 22 06:20:13 EST 2014


On 11/22/14, Naydin Andrey <naydinav at gmail.com> wrote:
>
> Привет Alex. Может имеет смысл создать репозиторий на github или еще
> где. Что б можно было сразу примеры-задачки сливать, собирать, вносить
> правки. Я это предлагаю в контексте
>> Кто что думает об этом коде? Что можно улучшить?
> Что б можно было создавать бранчи с решениям, которые по мнению
> конкретного взятого разработчика улучшают код. И затем обсуждать.
> И всегда можно будет в переписке ссылаться на нужный коммит/ветку.
> Это только предложение. А не условие.
>
> Анализируя пристегнутый код письму могу только пока предложить вариант
> ответа к следующему вопросу
>> Кто-нибудь может ясно объяснить, почему для корректной работы он
>> требует права root?

Потому что создается RAW socket, в данном случае raw ipv4 сокет где
возможно манипулировать любым полем в IP заголовке

> Тут я немного схитрил, что б получить ответ.
> Рута запрашивает на
>   sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
>
> А стандартный системный ping - нет. Поэтому не долго думая, слил
> исходники пакета busybox (очень советую скачать всем, кто хочет в полной
> мере на примере изучать разработку  системного ПО) и начал сравнивать
> нашей реализации Ping с тем что представлено в нем.
>
> Сокет создается там примерно так же. Но идет проверка, что если сокет не
> создался, то идет проверка на права доступа со следующей припиской.
> /* We don't have root privileges.  Try SOCK_DGRAM instead.//
> //         * Linux needs net.ipv4.ping_group_range for this to work.//
> //         * MacOSX allows ICMP_ECHO, ICMP_TSTAMP or ICMP_MASKREQ//
> //         *///
> /Гугл по запросу /ping_group_range
>
> Выдал такой результат.
> /
>
> Socket(2) is restricted to the group range specified in
> "/proc/sys/net/ipv4/ping_group_range" (or the owner of CAP_NET_RAW).  It
> is "1 0" by default, meaning that nobody except root may create ping
> sockets.  Setting it to "100 100" would gain permissions to the single
> group, "0 65535" would enable it for the world.
>
>
>
>
>
>


-- 
Regards,
Denis


More information about the Kernel-russian mailing list