Проверить все сокеты, открытые в операционной системе Linux

Моя программа открывает сокет с помощью этой функции:

sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP)

После завершения отправки данных сокет закрывается:

близко (sockfd);

Но проблема в том, что программа не работает хорошо и блокируется. Таким образом, гнездо не будет закрыто.

Как проверить все сокеты, открытые в ОС Linux?

Ответ 1

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

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

/proc/net/raw -a отображает все "сырые" сокеты

Это файлы, используйте команду cat для их просмотра. Например:

cat /proc/net/tcp

Вы также можете использовать команду lsof.

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

Ответ 2

Также вы можете использовать утилиту ss, чтобы сбрасывать статистику сокетов.

Сводка сводки:

ss -s

Total: 91 (kernel 0)
TCP:   18 (estab 11, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*         0         -         -        
RAW       0         0         0        
UDP       4         2         2        
TCP       18        16        2        
INET      22        18        4        
FRAG      0         0         0

Чтобы отобразить все сокеты:

ss -a

Для отображения сокетов UDP:

ss -u -a

Чтобы отобразить сокеты TCP:

ss -t -a

Здесь вы можете прочитать ss man: ss

Ответ 3

Вы можете использовать команду netstat

netstat --listen

Чтобы отобразить открытые порты и установленные TCP-соединения,

netstat -vatn

Чтобы отображать только открытые порты UDP, попробуйте выполнить следующую команду:

netstat -vaun

Ответ 4

Используйте ss ss - еще одну утилиту для исследования сокетов

попробуйте ss -p который покажет открытый сокет и соответствующий идентификатор процесса