Проверить все сокеты, открытые в операционной системе 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
который покажет открытый сокет и соответствующий идентификатор процесса