Python непривилегированный ICMP

Вам нужно локальное имя ():

http://www.w3.org/TR/xpath#function-local-name

Для закрепления от http://jcooney.net/archive/2005/08/09/6517.aspx :


  
    
              

Это выражение будет соответствовать элементу “bar”:

  //*[local-name()='bar'] 

Этот не будет:

 //bar

21
задан Community 23 May 2017 в 12:10
поделиться

3 ответа

Программа ping установлена ​​setuid root. Это позволяет любому пользователю использовать программу и по-прежнему иметь возможность открывать необработанный сокет.

После того, как он открывает необработанный сокет, он обычно отбрасывает привилегии root.

Обычно вам нужен необработанный сокет для правильного выполнения ICMP, и сырые сокеты обычно ограничены. Так что на самом деле это вовсе не вина python.

Что касается упомянутого выше ICMP, очевидно, что многие реализации на самом деле плохо поддерживают эти комбинации флагов. Так что вполне вероятно, что большинство внедрений просто используют способ, которым они «знают», работает на большинстве / на всех архитектурах.

13
ответ дан 29 November 2019 в 21:58
поделиться

Вот как / sbin / ping «каким-то образом управляет» (в большинстве систем Unix-y):

$ ls -l /sbin/ping
-r-sr-xr-x  1 root  wheel  68448 Jan 26 10:00 /sbin/ping

Видите? Он принадлежит root и имеет решающий бит s в разрешении - setuserid. Итак, независимо от того, какой пользователь его запускает, ping запускается от имени пользователя root .

Если вы используете ядро ​​BSD с новыми «непривилегированными сокетами ICMP», было бы интересно узнать, что нужно чтобы использовать эту функцию для проверки связи с Python (но это, конечно, не поможет любому пользователю с менее продвинутым ядром).

11
ответ дан 29 November 2019 в 21:58
поделиться

Я не уверен, можно ли публиковать что-то в вопросе, который, кажется, уже получил ответ некоторое время назад.

Я искал ту же реализацию и нашел способ сделать ICMP через Python с привилегиями без полномочий root.

python-ping использует тот же способ 'need-root' для проверки связи, но обнаружил отчет об ошибке, в котором пользователь предложил изменить SOCK_RAW на SOCK_DGRAM , когда вызов sock :

http://hg.io/delroth/python-ping/issue/1/icmp-without-root-privilege

Разработчик объясняет, что это будет "WONT- FIX », потому что это скорее UDP ping.

Так как меня действительно не волнует, идет ли ICMP через UDP, я пошел дальше, получил код и внес предложенные изменения.

Теперь я могу выполнить эхо-запрос, не вызывая подпроцесс и не нуждаясь в корне!

Опять же, не уверен, можно ли размещать здесь сообщения по прошествии такого долгого времени, но подумал, что это лучше!

0
ответ дан 29 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: