[Network] Простой ICMP запрос
Привет Alex. Может имеет смысл создать репозиторий на github или еще где. Что б можно было сразу примеры-задачки сливать, собирать, вносить правки. Я это предлагаю в контексте
Кто что думает об этом коде? Что можно улучшить? Что б можно было создавать бранчи с решениям, которые по мнению конкретного взятого разработчика улучшают код. И затем обсуждать. И всегда можно будет в переписке ссылаться на нужный коммит/ветку. Это только предложение. А не условие.
Анализируя пристегнутый код письму могу только пока предложить вариант ответа к следующему вопросу
Кто-нибудь может ясно объяснить, почему для корректной работы он требует права root? Тут я немного схитрил, что б получить ответ. Рута запрашивает на 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.
ну вообще привелегии root нужны, просто обычно /bin/ping с битом Suid: $ cd /bin ivr@debian:/bin $ ll | grep ping -rwsr-sr-x 1 root root 36K Apr 12 2011 ping -rwsr-xr-x 1 root root 37K Apr 12 2011 ping6 22.11.14, Naydin Andrey<naydinav@gmail.com> написал(а):
Привет Alex. Может имеет смысл создать репозиторий на github или еще где. Что б можно было сразу примеры-задачки сливать, собирать, вносить правки. Я это предлагаю в контексте
Кто что думает об этом коде? Что можно улучшить? Что б можно было создавать бранчи с решениям, которые по мнению конкретного взятого разработчика улучшают код. И затем обсуждать. И всегда можно будет в переписке ссылаться на нужный коммит/ветку. Это только предложение. А не условие.
Анализируя пристегнутый код письму могу только пока предложить вариант ответа к следующему вопросу
Кто-нибудь может ясно объяснить, почему для корректной работы он требует права root? Тут я немного схитрил, что б получить ответ. Рута запрашивает на 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.
обеими руками за идею с git, хотя не очень умею с ним работать. 22.11.14, Ivan Riabtsov<ivriabtsov@gmail.com> написал(а):
ну вообще привелегии root нужны, просто обычно /bin/ping с битом Suid: $ cd /bin ivr@debian:/bin $ ll | grep ping -rwsr-sr-x 1 root root 36K Apr 12 2011 ping -rwsr-xr-x 1 root root 37K Apr 12 2011 ping6
22.11.14, Naydin Andrey<naydinav@gmail.com> написал(а):
Привет Alex. Может имеет смысл создать репозиторий на github или еще где. Что б можно было сразу примеры-задачки сливать, собирать, вносить правки. Я это предлагаю в контексте
Кто что думает об этом коде? Что можно улучшить? Что б можно было создавать бранчи с решениям, которые по мнению конкретного взятого разработчика улучшают код. И затем обсуждать. И всегда можно будет в переписке ссылаться на нужный коммит/ветку. Это только предложение. А не условие.
Анализируя пристегнутый код письму могу только пока предложить вариант ответа к следующему вопросу
Кто-нибудь может ясно объяснить, почему для корректной работы он требует права root? Тут я немного схитрил, что б получить ответ. Рута запрашивает на 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.
On 11/22/14, Naydin Andrey <naydinav@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
participants (3)
-
Denis Kirjanov -
Ivan Riabtsov -
Naydin Andrey