Короткі відповіді - не і нелегко.
У 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.