ss — программа для исследования сокетов. Работает аналогично команде NetStat, но может отображать больше информации, чем другие утилиты. Большинство современных дистрибутивов Linux сразу устанавливаются с ss.
Синтаксис программы ss
ss [опции] [ ФИЛЬТР ]
Описание программы ss
ss используется для вывода статистики сокета в формате netstat. Эта программа выводит больше информации по TCP чем другие программы.
Опции программы ss
Программа придерживается обычной практики синтаксиса опций GNU, когда длинные опции начинаются с двух дефисов (`-‘). ss поддерживает следующие опции:
- -h, —help
- Вывести справку.
- -V, —version
- Вывести версию программы.
- -n, —numeric
- Не раскрывать имена служб.
- -r, —resolve
- Не раскрывать номера адресов/портов.
- -a, —all
- Показывать все сокеты.
- -l, —listening
- Показывать слушающие сокеты.
- -o, —options
- Показывать информацию таймера.
- -e, —extended
- Показывать детальные сведения о сокете.
- -m, —memory
- Показывать использование памяти сокетом.
- -p, —processes
- Показывать процесс, использующий сокет.
- -i, —info
- Показывать внутреннюю информацию TCP.
- -s, —summary
- Выводить сводку. Эта опция не обрабатывает список сокетов, а получает сведения из других источников. Полезно при огромном количестве сокетов, что делает обработку файла /proc/net/tcp слишком долгим.
- -4, —ipv4
- Показывать только сокеты IP версии 4 (аналогично -f inet).
- -6, —ipv6
- Показывать только сокеты IP версии 6 (аналогично -f inet6).
- -0, —packet
- Показывать пакетные сокеты.
- -t, —tcp
- Показывать только сокеты TCP.
- -u, —udp
- Показывать только сокеты UDP.
- -d, —dccp
- Показывать только сокеты DCCP.
- -w, —raw
- Показывать только сокеты RAW.
- -x, —unix
- Показывать только сокеты Unix.
- -f ТИП, —family=ТИП
- Показывать только сокеты указанного ТИПА. Поддерживаются следующие типы: unix, inet, inet6, link, netlink.
- -A ЗАПРОС, —query=ЗАПРОС
- Список таблиц сокетов, разделенных запятыми. Поддерживаются следующие идентификаторы: all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream, packet_raw, packet_dgram.
- -D ФАЙЛ
- Не показывать ничего, вывести необработанные данные о сокетах TCP в ФАЙЛ с учетом фильтров. Если ФАЙЛ указан как -, вывести на стандартный вывод.
- -F ФАЙЛ, —filter=ФАЙЛ
- Прочитать фильтр из ФАЙЛА. Каждая строка ФАЙЛА интерпретируется как отдельная опция командной строки. Если ФАЙЛ указан как -, получить содержимое из стандартного ввода.
- FILTER := [ state ФЛАГ_TCP ] [ ВЫРАЖЕНИЕ ]
- Обратитесь к официальной документации (пакет iproute-doc в Debian) для описания фильтров.
Примеры ss
1. Просмотр общей статистики по сокетам
$ ss -s
Пример вывода
Total: 484 (kernel 0) TCP: 48 (estab 6, closed 38, orphaned 0, synrecv 0, timewait 7/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 0 0 0 UDP 4 3 1 TCP 10 4 6 INET 14 7 7 FRAG 0 0 0
2. Просмотр открытых портов
$ ss -l
Пример вывода
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port nl UNCONN 0 0 rtnl:-603977212 * nl UNCONN 0 0 rtnl:-2038429180 * nl UNCONN 0 0 rtnl:ntpd/3782 * nl UNCONN 0 0 rtnl:kernel * nl UNCONN 0 0 rtnl:ntpd/3782 * nl UNCONN 4352 0 tcpdiag:ss/16869 * nl UNCONN 768 0 tcpdiag:kernel * nl UNCONN 0 0 selinux:kernel * nl UNCONN 0 0 iscsi:iscsid/2539 * nl UNCONN 0 0 iscsi:kernel * nl UNCONN 0 0 iscsi:iscsid/2539 * nl UNCONN 0 0 audit:-354350988 * nl UNCONN 0 0 audit:libvirtd/2564 * nl UNCONN 0 0 audit:kernel * nl UNCONN 0 0 audit:sudo/16115 * nl UNCONN 0 0 audit:systemd/1 * nl UNCONN 0 0 audit:systemd/1 * nl UNCONN 0 0 fiblookup:kernel * nl UNCONN 0 0 connector:kernel u_dgr UNCONN 0 0 /var/spool/postfix/dev/log 15123 * 0 u_str LISTEN 0 128 /var/lib/lxd/devlxd/sock 20906 * 0 u_dgr UNCONN 0 0 /run/user/1000/systemd/notify 39144 * 0 u_str LISTEN 0 128 /run/user/1000/systemd/private 39145 * 0 u_seq LISTEN 0 128 /run/udev/control 9571 * 0 u_str LISTEN 0 128 /var/lib/lxd/unix.socket 18493 * 0 u_str LISTEN 0 30 /sys/fs/cgroup/cgmanager/sock 15114 * 0 u_dgr UNCONN 0 0 /run/systemd/notify 9564 * 0 u_str LISTEN 0 100 @/var/lib/lxd/containers/lxdns/command 20924 * 0 u_str LISTEN 0 100 @/var/lib/lxd/containers/lxopenfire/command 20107 * 0
Если добавить p, то в выводе будет видно какой процесс использует сокет
$ ss -l
tcp LISTEN 0 128 127.0.0.1:45015 *:* users:(("node",pid=5813,fd=11)) tcp LISTEN 0 128 *:5719 *:* tcp LISTEN 0 128 :::4000 :::* users:(("node",pid=12885,fd=18)) tcp LISTEN 0 128 :::5719 :::*
3. Просмотр TCP сокетов
$ ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:www *:* LISTEN 0 128 :::ssh :::* LISTEN 0 128 *:ssh *:* LISTEN 0 128 127.0.0.1:postgresql *:* LISTEN 0 128 ::1:postgresql :::* ESTAB 0 0 192.168.1.117:ssh 192.168.1.220:3823
последней строчкой видно меня, подключенного к серверу по ssh 🙂
4. Просмотр UDP подключений
$ss -u -a
5. Просмотр активных подключений
$ ss -o state established '( dport = :smtp or sport = :ssh )'