Определите, когда сокет TCP открывается с помощью inotify

Как видно из заголовка, есть ли способ уведомления о недавно открытых сокетах с помощью инструментов inotify/inotify? Насколько я могу судить, inotify работает только с инодами, и, в частности, тестирование, если эти иноды являются сокетами, не является тем, на что inotify действительно способен. В дополнение к этому, я не могу найти, где хранятся сокеты FD. Я могу видеть только их файловые дескрипторы, которые являются символическими ссылками:

# ls -l /proc/29711/fd/10 
lrwx------ 1 root root 64 Mar  6 17:04 /proc/29711/fd/10 -> socket:[750728]

# stat /proc/29711/fd/10
  File: `/proc/29711/fd/10' -> `socket:[750728]'
  Size: 64              Blocks: 0          IO Block: 1024   symbolic link
Device: 3h/3d   Inode: 759700      Links: 1
Access: (0700/lrwx------)  Uid: ( 0/    root)   Gid: ( 0/    root)
Access: 2013-03-06 17:05:22.690411801 +1100
Modify: 2013-03-06 17:04:14.062414880 +1100
Change: 2013-03-06 17:04:14.062414880 +1100
 Birth: -

2 ответа

Решение

Inotify предназначен для мониторинга событий файловой системы, поэтому, если нет специального FS, представляющего системные сокеты, - ни за что.

Я рекомендую посмотреть на netlink и на его NETLINK_INET_DIAG в частности, но я не могу точно сказать, есть ли у него соответствующие объекты вообще.

ОБНОВЛЕНИЕ: я поделился этим вопросом-ответом, и Павел Емельянов - главный разработчик CRIU, подтвердил мои подозрения - более чем вероятно, что вы не можете получить эти уведомления с netlink,

Обновление: вы можете отслеживать эти события с помощью conntrack-tools.

Другие вопросы по тегам