Моя цель — отслеживать сокеты и связывать их с приложениями, которые их создали.
Я знаю о netstat, ss, lsof и т. д., и что они могут перечислить все сокеты с помощью своего приложения.
И я также знаю, что Я могу разобрать /proc/net/tcp
, чтобы получить сокеты и связать их с приложениями с помощью /proc/(PID)
, что именно и делают эти инструменты, или они используют сокеты netlink.
Мои исследования привели меня к статье, в которой объясняется, как получить все сокеты из ядра с помощью netlink. по протоколу inet_diag. Программа пользовательского пространства устанавливает сокет netlink типа inet_diag и отправляет запрос ядру. Ответ состоит из нескольких сообщений, содержащих сокеты и дополнительную информацию.
Это очень удобно, но, к сожалению, ядро отправляет эту информацию только один раз за запрос. Поэтому я должен постоянно «опрашивать».
Дальнейшие исследования привели меня к другой статье, которая отслеживает IP-адреса интерфейсов с сокетами netlink постоянно меняются. Сокет привязывается к многоадресной группе, а затем сообщения считываются из него в бесконечном цикле.
Поэтому я исследовал, есть ли такая же возможность с сокетами inet_diag. К сожалению, я не совсем понимаю код ядра. Но, насколько я могу судить, для этого семейства сокетов нет многоадресных групп.
На данный момент я застрял, и мне нужно знать, возможен ли этот подход или кто-то знает какие-либо другие подсказки.
lsof
, не соответствует вашим потребностям. - person Greg Hewgill   schedule 31.08.2013