Команда Socket Statistics (ss) аналогична команде netstat, она также используется для отображения полезной информации о сетевых сокетах.
В течение некоторого времени на странице руководства netstat было примечание: «Эта программа устарела. Замена для netstat — это ss.»
К счастью, многие параметры похожи на те, которые использует netstat, однако, как мы увидим, есть несколько отличий.
Команда ss является частью пакета iproute в CentOS 7 Linux и устанавливается по умолчанию.
Вообще говоря, сетевой сокет определяется IP-адресом, транспортным протоколом и портом. Эта комбинация составляет одну сторону двустороннего соединения. Например, веб-сервер может прослушивать входящие TCP-соединения 1.1.1.1:80, это сокет. Важно отметить, что сокет — это не само соединение, а одна из конечных точек соединения.
Синтаксис команды ss, который мы будем использовать здесь, показан ниже, по сути, мы можем указать дополнительные флаги и фильтры, как мы сейчас обсудим.
1. Перечисление установленных соединений
По умолчанию, если мы запустим команду ss без указания дополнительных параметров, она отобразит список сокетов, которые установили соединения, например, TCP, UDP или UNIX сокеты.
[root@centos7 ~]# ss | head -n 5
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 23740 * 23739
u_str ESTAB 0 0 * 23707 * 23706
u_str ESTAB 0 0 * 87021 * 88383
u_str ESTAB 0 0 * 17056 * 17112
В приведенном выше примере я ограничил вывод.
2. Просмотр всех сокетов в состоянии LISTEN
Вместо того, чтобы перечислять все сокеты, мы можем использовать опцию -l, чтобы отображать только сокеты в состоянии LISTEN
[root@centos7 ~]# ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 2 *:kerberos-adm *:*
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 5 *:kpasswd *:*
LISTEN 0 10 192.168.1.14:domain *:*
LISTEN 0 10 127.0.0.1:domain *:*
LISTEN 0 5 192.168.122.1:domain *:*
LISTEN 0 128 *:ssh *:*
В этом примере мы также использовали опцию -t только для вывода списка TCP, подробнее об этом позже. В следующих примерах вы увидите, что мы будем комбинировать несколько таких вариантов, чтобы быстро отфильтровать то, что нам нужно.
3. Перечисление процессов
Мы можем вывести процесс или PID номер, которому принадлежит сокет, с опцией -p.
[root@centos7 ~]# ss -pl
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 :::http :::* users:(("httpd",pid=10522,fd=4),("httpd",pid=10521,fd=4),("httpd",pid=10520,fd=4),("httpd",pid=10519,fd=4),("httpd",pid=10518,fd=4),("httpd",pid=10516,fd=4))
В вышеприведенном примере я показал только один результат, без каких-либо дополнительных параметров при полном выводе команды ss выводится более 500 строк в стандартный вывод. В любом случае, мы можем видеть идентификаторы различных процессов Apache, работающих на этом сервере.
4. Отключить вывод названия служб
По умолчанию ss выводит название службы вместо локального порта, как мы видели ранее.
[root@centos7 ~]# ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 64 192.168.1.14:ssh 192.168.1.191:57091
Однако если мы укажем опцию -n, то вместо названия сервиса мы увидим номер порта.
[root@centos7 ~]# ss -n
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.14:22 192.168.1.191:57091
Обратите внимание, что теперь отображается :22, а не :ssh, так как мы отключили все разрешения на вывод имен хостов и портов. Вы можете проверить файл /etc/services, чтобы увидеть полный список того, какие порты соответствуют каким службам.
5. Разрешить числовой адрес/порт
Мы также можем сделать обратное и разрешить как IP-адрес, так и номер порта с помощью опции -r. Теперь мы видим имя хоста сервера 192.168.1.14
[root@centos7 ~]# ss -r
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 64 centos7.example.com:ssh 192.168.1.191:57091
6. IPv4 сокеты
Мы можем использовать опцию -4 только для отображения информации, соответствующей сокетам IPv4. В приведенном ниже примере мы также используем опцию -l для вывода списка всех прослушиваний по IPv4 адресу.
[root@centos7 ~]# ss -ul
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:mdns *:*
UNCONN 0 0 *:kpasswd *:*
UNCONN 0 0 *:839 *:*
UNCONN 0 0 *:36812 *:*
UNCONN 0 0 192.168.122.1:domain *:*
UNCONN 0 0 192.168.1.14:domain *:*
7. IPv6 сокеты
Аналогично, мы можем использовать опцию -6 только для отображения информации, связанной с сокетами IPv6. В приведенном ниже примере мы также используем опцию -l для вывода списка всех прослушиваний по IPv6-адресу.
[root@centos7 ~]# ss -l6
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 :::ipv6-icmp :::*
udp UNCONN 0 0 :::22834 :::*
udp UNCONN 0 0 ::1:323 :::*
tcp LISTEN 0 128 :::sunrpc :::*
tcp LISTEN 0 128 :::http :::*
tcp LISTEN 0 128 :::ssh :::*
tcp LISTEN 0 128 ::1:ipp :::*
tcp LISTEN 0 100 ::1:smtp :::*
8. Только TCP
Опция -t может использоваться для отображения только сокетов TCP. В сочетании с -l команда покажет только сокеты в состоянии LISTEN.
[root@centos7 ~]# ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 5 192.168.122.1:domain *:*
LISTEN 0 128 *:ssh *:*
LISTEN 0 128 127.0.0.1:ipp *:*
LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN 0 128 :::sunrpc :::*
LISTEN 0 128 :::http :::*
LISTEN 0 128 :::ssh :::*
LISTEN 0 128 ::1:ipp :::*
LISTEN 0 100 ::1:smtp :::*
9. Только UDP
Опция -u может использоваться для отображения только сокетов UDP. Поскольку UDP — это протокол без установления соединения, простой запуск только с параметром -u ничего не покажет. Вместо этого мы можем комбинировать это с опцией -a или -l, чтобы увидеть все прослушивающие сокеты UDP, как показано ниже.
[root@centos7 ~]# ss -u
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 192.168.1.14:56658 129.250.35.251:ntp
[root@centos7 ~]# ss -ua
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:mdns *:*
UNCONN 0 0 127.0.0.1:323 *:*
ESTAB 0 0 192.168.1.14:56658 129.250.35.251:ntp
UNCONN 0 0 *:21014 *:*
UNCONN 0 0 *:60009 *:*
UNCONN 0 0 192.168.122.1:domain *:*
UNCONN 0 0 *%virbr0:bootps *:*
UNCONN 0 0 *:bootpc *:*
UNCONN 0 0 ::1:323 :::*
UNCONN 0 0 :::43209 :::*
10. UNIX сокеты
Опция -x может использоваться для отображения только доменных сокетов unix.
[root@centos7 ~]# ss -x
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 @/tmp/.X11-unix/X0 27818 * 27817
u_str ESTAB 0 0 @/tmp/.X11-unix/X0 26656 * 26655
u_str ESTAB 0 0 * 28344 * 26607
u_str ESTAB 0 0 * 24704 * 24705
u_str ESTAB 0 0 @/tmp/.X11-unix/X0 25195 * 24086
u_str ESTAB 0 0 @/tmp/dbus-CRqRiw6V 28388 * 28693
11. Вывод всей информации
Опция -a показывает все сокеты, в состоянии LISTEN и в других. В случае TCP это означает установленные соединения. Эта опция полезна для объединения с другими, например, чтобы показать все сокеты UDP, так как по умолчанию только с опцией -u мы не увидим столько информации.
[root@centos7 ~]# ss -u
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 192.168.1.14:56658 129.250.35.251:ntp
[root@centos7 ~]# ss -ua
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:mdns *:*
UNCONN 0 0 127.0.0.1:323 *:*
ESTAB 0 0 192.168.1.14:56658 129.250.35.251:ntp
UNCONN 0 0 *:21014 *:*
UNCONN 0 0 *:60009 *:*
UNCONN 0 0 192.168.122.1:domain *:*
UNCONN 0 0 *%virbr0:bootps *:*
UNCONN 0 0 *:bootpc *:*
UNCONN 0 0 ::1:323 :::*
UNCONN 0 0 :::43209 :::*
12. Показать использование памяти сокетом
Опция -m может использоваться для отображения объема памяти, используемого каждым сокетом.
[root@centos7 ~]# ss -ltm
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 5 192.168.122.1:domain *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 128 *:ssh *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 128 127.0.0.1:ipp *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 100 127.0.0.1:smtp *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
13. Показать внутреннюю информацию TCP
Мы можем запросить дополнительную внутреннюю информацию TCP с опцией -i.
[root@centos7 ~]# ss -lti
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN 0 5 192.168.122.1:domain *:*
cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN 0 128 *:ssh *:*
cubic rto:1000 mss:536 cwnd:10 segs_in:2 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN 0 128 127.0.0.1:ipp *:*
cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN 0 100 127.0.0.1:smtp *:*
cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
14. Просмотр сводки
Мы можем увидеть краткий обзор статистики с опцией -s.
[root@centos7 ~]# ss -s
Total: 1253 (kernel 1721)
TCP: 13 (estab 1, closed 2, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 1721 - -
RAW 1 0 1
UDP 9 7 2
TCP 11 6 5
INET 21 13 8
FRAG 0 0 0
Это быстро позволяет нам видеть такие вещи, как общее количество установленных соединений, а также подсчет каждого типа сокетов и используется IPv4 или IPv6.
15. Фильтр на основе состояния
Мы можем указать состояние сокета, чтобы выводить сокеты только в этом состоянии. Например, мы можем указать состояния, включая: established , syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, closed-wait, last-ack, listen и close. В приведенном ниже примере показаны все установленные соединения TCP. Чтобы сгенерировать этот вывод, я был подключен к серверу по SSH и просто загрузил веб-страницу из Apache. Затем мы видим, что соединения с Apache быстро меняются на time-wait.
[root@centos7 ~]# ss -t state established
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 64 192.168.1.14:ssh 192.168.1.191:57091
0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57373
0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57372
[root@centos7 ~]# ss -t state time-wait
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57373
0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57372
16. Фильтр по порту
Фильтрация также может быть выполнена для вывода списка всех портов, которые меньше (lt), больше (gt), равны (eq), не равны (ne), меньше или равны (le), больше или равны (ge).
Например, команда ниже показывает все прослушивающие порты с номером порта 500 или ниже.
[root@centos7 ~]# ss -ltn sport le 500
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
Для сравнения мы можем выполнить противоположное и просмотреть все порты больше 500 с помощью «gt».
[root@centos7 ~]# ss -ltn sport gt 500
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 ::1:631 :::*
Мы также можем фильтровать на основе таких элементов, как локальный порт или конечный порт, например, ниже мы ищем сокеты TCP, которые имеют локальный порт (sport) ssh.
[root@centos7 ~]# ss -t '( sport = :ssh )'
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 64 192.168.1.14:ssh 192.168.1.191:57091
17. Вывод контекста SELinux
Параметры -Z и -z могут использоваться для отображения контекста безопасности сокета SELinux. В приведенном ниже примере мы также используем параметры -t и -l только для вывода списка listen сокетов TCP, а с помощью параметра -Z мы также можем видеть контексты SELinux.
[root@centos7 ~]# ss -tlZ
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:* users:(("systemd",pid=1,proc_ctx=system_u:system_r:init_t:s0,fd=71))
LISTEN 0 5 192.168.122.1:domain *:* users:(("dnsmasq",pid=1810,proc_ctx=system_u:system_r:dnsmasq_t:s0-s0:c0.c1023,fd=6))
LISTEN 0 128 *:ssh *:* users:(("sshd",pid=1173,proc_ctx=system_u:system_r:sshd_t:s0-s0:c0.c1023,fd=3))
LISTEN 0 128 127.0.0.1:ipp *:* users:(("cupsd",pid=1145,proc_ctx=system_u:system_r:cupsd_t:s0-s0:c0.c1023,fd=12))
LISTEN 0 100 127.0.0.1:smtp *:* users:(("master",pid=1752,proc_ctx=system_u:system_r:postfix_master_t:s0,fd=13))
18. Версия программы
Опция -v может использоваться для отображения конкретной информации о версии для команды ss, в этом случае мы видим версию пакета iproute, которая предоставляет ss.
[root@centos7 ~]# ss -v
ss utility, iproute2-ss130716
19. Вывод вспомогательной документации
Опция -h может использоваться для отображения дополнительной справки по команде ss, ее удобно использовать в качестве краткого справочника, если вам нужно краткое описание опций.
[root@centos7 ~]# ss -h
Usage: ss [ OPTIONS ]
...
20. Показать расширенную информацию
Мы можем использовать опцию -e, которая показывает расширенную детальную информацию в конце строки.
[root@centos7 ~]# ss -lte
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:* ino:16090 sk:ffff880000100000 <->
LISTEN 0 5 192.168.122.1:domain *:* ino:23750 sk:ffff880073e70f80 <->
LISTEN 0 128 *:ssh *:* ino:22789 sk:ffff880073e70000 <->
LISTEN 0 128 127.0.0.1:ipp *:* ino:23091 sk:ffff880073e707c0 <->
LISTEN 0 100 127.0.0.1:smtp *:* ino:24659 sk:ffff880000100f80 <->
21. Информация о таймере
Опция -o может использоваться для отображения информации о таймере. Эта информация показывает нам такие вещи, как значение таймера повторной передачи, количество повторных передач и количество отправленных проверок активности.
[root@centos7 ~]# ss -to
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 64 192.168.1.14:ssh 192.168.1.191:57091 timer:(on,242ms,0)
ESTAB 0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57295 timer:(keepalive,120min,0)
ESTAB 0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57296 timer:(keepalive,120min,0)