Коротких ответов нет и не легко.
В Linux lsof полагается на /proc/net/unix
получение информации о сокетах домена UNIX. Этот интерфейс содержит список всех связанных сокетов, но он не следить за конечные точки. Таким образом, вы можете видеть, какие сокеты существуют, но вы не можете видеть, что с ними связано. Где - то эта информация будет отслеживаться, она должна быть отслежена или иначе соединение розетки не будет работать. Я еще не нашел какой-либо механизм для получения информации о соединении.
Вопрос об нюхании немного интереснее, но не менее разочаровывает. То, что я имел в виду под «не легко», - это то, что не существует какого-либо крючка, чтобы проникнуть и захватить эти данные. Ближайшим аналогом является использование tcpdump или Wireshark, оба из которых используют libpcap для выполнения тяжелой работы. Хотя сеть (AF_INET) и домен UNIX (AF_UNIX) созданы с использованием socket()
вызова функции, оба используют connect()
для подключения, как для обработки , так read()
и write()
для обработки данных, они обрабатываются различными подсистемами ядра. Это имеет неприятный побочный эффект, что libpcap не предназначен для работы с сокетами домена UNIX.
Есть немного менее смутная сторона проблемы. Взгляните на справочную страницу для recv(2)
. Это системный вызов более низкого уровня, который read()
использует. Существует флаг для recv()
вызова MSG_PEEK
. Это позволит вам прослушивать трафик, проходящий через сокет домена UNIX. Так что это светлая сторона, темная сторона в том, что, насколько мне известно, не существует ни одного текущего приложения, предназначенного для этого. Итак, вы смотрите на некоторые усилия по разработке.
Я действительно хочу там был хороший простой ответ F'YEAH к обеим частям вашего вопроса.
socat -t100 UNIX-LISTEN: /tmp/file.sock,mode=777,reuseaddr,fork STDOUT
Нет дублирования вывода, нет циклического вывода. Ошибка предыдущего комментария ".sock.socat"
источник