Как получить список открытых сокетов в 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 и т. д. Обратитесь к заголовку в первой строке для (краткого) описания.