Как знать, присоединен ли процесс к интерфейсу касания?

Вы могли смотреть на webmin. Не уверенный, что это позволяет мелкомодульные средства управления.

9
29.04.2015, 21:16
3 ответа

Это получило меня удивление, и я взглянул на источник ядра Linux (я предполагаю, что Ваш вопрос о Linux).

Это появляется ответ, более трудный, чем Вы ожидали бы. Эта страница руководства по интерфейсу API БОЧКИ/TAP предлагает некоторое понимание. В основном Ваша программа выделяет новое устройство БОЧКИ/TAP путем открытия /dev/net/tun и отправка его TUNSETIFF ioctl. Если все подходит, интерфейс создается, ядро дает Вам свое имя и дескриптор файла, и это - то, как Вы управляете им.

Здесь существует две выгоды:

  1. Ядро не хранит PID процесса, который представил ioctl struct tun_struct (БОЧКА и TAP в основном совместно используют те же структуры данных).
  2. Процесс может отметить интерфейс как персистентный, закрыть его дескриптор файла и после этого использовать его в качестве нормального сетевого интерфейса.

На практике я подозреваю 2, не происходит очень. Проверка openvpn процесс с lsof показывает, что это все еще получило свой дескриптор файла к открытому устройству TAP и очевидно использующему это, но с тех пор /dev/net/tun своего рода устройство мультиплексирования как /dev/ptmx, можно использовать lsof узнать, какие процессы в настоящее время используют устройство БОЧКИ/TAP, но Вы не можете знать то, что процесс использует что устройство.

Существуют наклонные способы решить базовую проблему. Для OpenVPN я использую туннельный сценарий установки, который называет tunX/tapX устройства с более описательным именем, которое включает базовое имя файла конфигурации OpenVPN. Так, /etc/openvpn/foo.conf приводит к a vpn-foo устройство. Затем я могу коррелировать процесс OpenvVPN с интерфейсом, который он использует. Еще не должны были делать этого с QEmu/KVM, все же.

2
27.01.2020, 20:07
  • 1
    Хорошо. Я подозревал также, что "мультиплексирование"/dev/net/tun предотвратит нас для знания, с каким касанием соединяют интерфейсом точно, процесс присоединяется также. –  user368507 17.06.2012, 18:38
ifconfig tap0

должен показать Вам, какой процесс подключен к интерфейсу.

1
27.01.2020, 20:07
  • 1
    , Что ОС и версия - Вы примеряющий это? Было бы ОЧЕНЬ удобно иметь эту информацию (я выполняю поле с десятками конечных точек VPN), но Debian ifconfig не показывает это. Обратите внимание, это tap устройства, созданные OpenVPN — хотя я не вижу, почему должно быть различие. –  Alexios 16.06.2012, 14:17
  • 2
    Это о FreeBSD или любой другой производной BSD. –  kworr 26.02.2015, 17:19

Каждый файловый дескриптор имеет запись /proc/pid/fdinfo/num, например:

# cat /proc/24332/fdinfo/28
pos:    0
flags:  0104002
mnt_id: 18
iff:    tap0123acdc-66

Таким образом, с именем интерфейса можно получить pid:

# egrep -l iff:.*tap0123acdc-66 /proc/*/fdinfo/* 2>/dev/null|cut -d/ -f3
24332
4
27.01.2020, 20:07

Теги

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