Как получить список открытых сокетов в Linux с использованием C?

есть ли способ получить список всех открытых сокетов (адрес сокета или дескриптор сокета ) в Linux с помощью C в пользовательском пространстве или ядре?

спасибо

4 ответов


откройте и прочитайте следующее:

/proc/net/tcp - список открытых сокетов TCP

/proc/net/udp - список открытых сокетов UDP

/proc/net/raw - список всех "сырых" сокетов

Это как "обычные" файлы, которые вы открываете и читаете с помощью filehandle и дадите вам всю необходимую информацию о каждом сокете.


эта программа может быть полезна для вас и демонстрирует, как анализировать файлы/net/ proc/*sockstat.c


в каталоге / proc / self/fd есть поддельные символические ссылки, дающие вам все ваши открытые файловые дескрипторы-сокеты дают что-то вроде:

lrwx------ 1 root root 64 2009-05-08 07:45 4 -> socket:[4921]
lrwx------ 1 root root 64 2009-05-08 07:45 5 -> socket:[4918]
lrwx------ 1 root root 64 2009-05-08 07:45 6 -> socket:[5395]

повторите их с помощью opendir, readdir (), а затем опросите их с помощью readlink ()

Если вы знаете, что FD 4 является сокетом, вы можете вызвать getsockname () на нем, чтобы получить семейство локальных адресов, адрес и т. д., Если они связаны.


необработанные данные можно найти в /proc / net / tcp, / proc / net / udp и т. д. Обратитесь к заголовку в первой строке для (краткого) описания.