Почему в state присутствует только unconn
Перейти к содержимому

Почему в state присутствует только unconn

  • автор:

Команда SS в Linux с полезными примерами

Команда ss — это терминальная команда, используемая для отображения информации о сетевом сокете в Linux. SS расшифровывается как статистика сокетов. Это инструмент аналогичный netstat, который отображает немного больше информации, такой как информация о состоянии TCP.

Инструмент ss поставляется в комплекте с пакетом iproute2. Он может отображать статистику для сокетов домена PACKET, TCP, UDP, DCCP, RAW и Unix.

В этой статье мы расскажем про команду ss в Linux и покажем полезные примеры.

1. Отображение сетевого подключения командой SS

Команда ss без каких-либо параметров отобразит все открытые сокеты (например, TCP/UNIX/UDP), которые установили соединение.

Отображение сетевого подключения командой SS

  1. Netid: отображает типы сокетов.
  2. State: отображает состояние сокета, если он установлен (ESTAB), Не подключен (UNCONN) или прослушивается (LISTEN).
  3. Recv-Q: этот столбец отображает количество принятых пакетов в очереди.
  4. Send-Q: данная колонка отображает количество отправленных пакетов в очереди.
  5. Local address:port: показывает адрес локальной машины и порт.
  6. Peer address:port: отображает адрес удаленной машины и порт.

Вы можете получить более подробную информацию, используя команду ss в сочетании с различными опциями. Вы также можете выбрать несколько вариантов одновременно.

Синтаксис команды ss:

2. Список прослушивающих сокетов

Для отображения списка прослушиваемых сокетов используйте опцию -l или —listen .

Список прослушивающих сокетов

3. Отображение всех сокетов

Вы можете отобразить все прослушивающие и не прослушивающие сетевые подключения, используя опцию -a или -all .

Отображение всех сокетов

4. Просмотр TCP-соединений командой SS

Чтобы отобразить соединение TCP-сокета, используйте опцию -t или —tcp .

Просмотр TCP-соединений командой SS

Чтобы отобразить список всех TCP-соединений, вы можете использовать параметры -a и -t одновременно. Это включает в себя состояние всех сокетов.

Чтобы отобразить TCP — соединение для всех состояний, объедините параметры -l и -t .

5. Показ UDP-соединений

Чтобы показать подключение к сокету UDP, используйте опцию -u или —udp .

Показ UDP-соединений

Чтобы отобразить список всех UDP подключений, используйте параметры -a и -u . Это включит в себя состояния сокета.

Вы можете объединить -l и -u эта связка параметров отобразит UDP-соединение, всех состояний прослушивания сокета.

6. Отображение списка сокетов Unix

Чтобы отобразить все сокеты Unix, вы можете использовать команду ss вместе с -f unix или -x .

Отображение списка сокетов Unix

7. Показ необработанных сокетов

Чтобы отобразить все необработанные сокеты, вы можете использовать опцию -w или —raw .

Показ необработанных сокетов

8. Показать подключенные IP-адреса

Мы можем использовать команду ss для отображения списка соединений определенного IP-адреса назначения или источника.

Возможно вам будет интересно: Что такое буфер обмена

Например, чтобы указать подключение IP-адреса:

Показать подключенные IP-адреса

Например, чтобы указать подключение исходного IP-адреса:

указать подключение исходного IP-адреса

9. Отобразить подключения к сокетам IPv4 и IPv6

Если вы хотите отобразить список подключений сокетов IPv4, используйте опции -4 и -6 для отображения списка подключений сокетов.

Для отображения списка подключений к сокету IPv4 введите:

Отобразить подключения к сокетам IPv4

Для отображения списка подключений к сокетам IPv6 используйте команду:

Отобразить подключения к сокетам IPv6

Чтобы посмотреть все TCP-соединения IPv4, вы можете использовать следующий пример.

Просмотр всех TCP-соединений IPv4

10. Определите процессы

Вы можете найти процессы сокетов, используя опцию -p вместе с командой ss. Чтобы идентифицировать процесс, вам потребуется пользователь с sudo.

Поиск процессов сокета

11. Показать соединение без разрешения имени хоста

Для разрешения числового адреса/портов используйте параметр -r (resolve). В то время как параметр -n — не разрешает имена служб.

В этом примере, вы можете увидеть разницу между этими двумя:

$ ss -tn
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 74.208.235.196:22 48.192.234.17:60216

$ ss -tr
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 64 li82-186.members.linode.com:ssh n47-172-231-17.sun4.vic.optusnet.com.au:60317
$

12. Фильтр по соединению

Давайте рассмотрим несколько примеров того, как применять фильтры для вывода конкретной информации.

Чтобы отфильтровать TCP-соединение с прослушиванием состояния, введите:

Для отображения установленных подключений к ssh— портам используйте эут команду:

$ ss -tr state established ‘( dport = :22 or sport = :22 )’

Вы также можете использовать традиционный способ команды grep для фильтрации. Здесь я показываю все TCP-соединения, которые прослушиваются:

Параметры команды ss

Команда ss предоставляет различные опции для управления выводом, которые будут отображаться в соответствии с вашими требованиями. Вы можете использовать -h или —help вместе с командой ss, чтобы просмотреть основные параметры, доступные с помощью утилиты ss.

Справка по команде SS

Сравнение команд ss и netstat

Инструмент ss включен в пакет iproute2 и используется по умолчанию в большинстве дистрибутивов Linux. Чтобы получить netstat, вам необходимо установить net-tools, который уже устарел. Команда ss выполняется намного быстрее, так как она работает непосредственно из ядра. SS не является полной заменой netstat, часть команды netstat заменена командой ip.

Возможно вам будет интересно: Как клонировать раздел или жесткий диск в Linux

Заключение

В этой статье мы рассказали о команде ss и показали некоторые полезные примеры. Вы можете ознакомиться со справочной страницей команды ss для получения дополнительной информации.

Первое знакомство с командой ss

В Linux есть программы, которые пригодятся программистам, специалистам по информационной безопасности, администраторам… короче говоря, каждый найдёт здесь то, что ему нужно.

Инструмент командной строки netstat был одним из тех средств, которыми часто пользовались системные администраторы. Однако команда netstat была признана устаревшей и на смену ей пришла более быстрая и удобная в использовании команда ss .

Сегодня мы поговорим о том, как применять ss для того, чтобы узнавать о том, что происходит с сетью на компьютере, работающем под управлением Linux.

О команде ss

Команда ss — это инструмент, используемый для вывода сетевой статистики в виде, похожем на тот, который выдаёт команда netstat . Однако, ss делает это проще и быстрее, чем netstat . Кроме того, ss даёт более подробные сведения о TCP-подключениях и о состояниях соединений, чем большинство других инструментов. В частности, ss может выводить данные о таких сущностях, как PACKET, TCP, UDP, DCCP, RAW, и сокеты домена Unix. Команда ss проще, чем netstat . для того, чтобы в этом убедиться, достаточно сравнить страницы man этих двух инструментов. С помощью ss можно получить весьма подробные сведения о том, как машина, работающая под управлением Linux, обменивается данными с другими компьютерами. Всё это открывает возможности по диагностике и устранению различных сетевых ошибок.

Основы ss

Команда ss работает так же, как и любые другие утилиты командной строки Linux. А именно, в командной строке вводят имя соответствующего исполняемого файла, за которым следует необходимая комбинация опций. Если взглянуть на страницу справки по ss (вызвать её можно командой man ss ), можно заметить, что тут присутствует гораздо меньше ключей командной строки, чем у netstat . Однако это не говорит о скудных возможностях ss . На самом деле, перед нами — весьма мощный инструмент.

Если запустить ss без аргументов командной строки или опций, она выведет полный список работающих соединений.

Полный список установленных соединений

Так как команда ss (без опций) показывает очень много данных (подробности по всем соединениям, установленным по TCP, UDP и с помощью сокетов Unix), можно отправить вывод этой команды в файл для того, чтобы проанализировать его позже. Делается это, например, так:

ss > ss_output

Конечно, в любых ситуациях команда в простейшем виде не так уж и полезна. Что если нужно лишь вывести список сокетов, ожидающих соединений? Сделать это просто — достаточно воспользоваться опцией -l :

ss -l

Такая команда выведет список, в котором присутствуют лишь сокеты, находящиеся в режиме прослушивания сети.

Для того чтобы ещё немного сузить диапазон выводимых этой командой данных, учитывайте то, что опция -t позволяет просматривать сведения по TCP-соединениям, опция -u предназначена для вывода данных по UDP-соединениям, опция -x выводит данные по соединениям Unix. Выглядит всё это следующим образом: ss -t , ss -u , или ss -x . Любая из этих команд выведет большой объём данных, которые можно проанализировать.

Команда ss, выполненная в Elementary OS выдаёт список UDP-соединений

По умолчанию использование опций -t , -u или -x выведет лишь данные по установленным соединениям. Если нужно отобрать соединения, ожидающие подключений, понадобится добавить к вызову команды опцию -a :

ss -t -a

В вывод этой команды попадут TCP-сокеты:

Обратите внимание на то, что последний сокет ожидает ssh-подключений

В вышеприведённом примере можно заметить, что соединения (в различных состояниях) установлены с IP-адреса анализируемого компьютера, при этом выводятся сведения по портам на этом компьютере, а также по адресам и портам на удаленных системах. В отличие от команды netstat , ss не выводит сведения о PID и имени команды, ответственной за конкретное соединение. Однако, даже учитывая это, в нашем распоряжении оказывается немало данных для поиска сетевых ошибок. Если нечто оказывается под подозрением, ss позволит узнать подробности о соединении, а значит, дать в распоряжение администратора сведения, которые пригодятся на ранних стадиях решения сетевых проблем.

Фильтрация вывода ss на основе состояний TCP

Весьма удобная возможность команды ss заключается в том, что она может фильтровать вывод, используя состояния TCP (или состояния жизненного цикла соединения). Благодаря использованию состояний облегчается фильтрация вывода ss . А именно, здесь доступны все стандартные состояния TCP:

  • established
  • syn-sent
  • syn-recv
  • fin-wait-1
  • fin-wait-2
  • time-wait
  • closed
  • close-wait
  • last-ack
  • listening
  • closing
  • all (все вышеперечисленные состояния)
  • connected (все состояния, кроме ожидающих соединения и закрытых)
  • synchronized (все состояния, соответствующие установленным соединениям, за исключением syn-sent )
  • bucket (состояния, представляющие собой минисокеты, например — time-wait и syn-recv )
  • big (всё кроме того, что соответствует идентификатору bucket )
ss -4 state FILTER
ss -6 state FILTER

В этих двух примерах FILTER представляет собой идентификатор состояния.
Предположим, нужно просмотреть все ожидающие соединения IPv4-сокеты. Сделать это поможет такая команда:

ss -4 state listening

В ответ на эту команду система выведет нечто подобное тому, что показано на следующем рисунке.

Использование ss с фильтром состояния ожидания соединения

Показ подключений с конкретных адресов

Одно из полезных применений ss заключается в том, чтобы получать с помощью этой команды сведения по соединениям, установленных с неких IP-адресов. Предположим, нужно выяснить, подключена ли машина, скажем, с IP-адресом 192.168.1.139 к нашему серверу, и если это так — узнать об этом подробности. Для решения этой задачи подойдёт такая команда:

ss dst 192.168.1.139

В ответ на эту команду будут выведены сведения, включающие в себя Netid, состояние подключения, данные по локальному IP-адресу и порту, а также по удалённому IP и порту соединения.

Удалённый компьютер установил ssh-подключение к нашей машине

Итоги

Утилита ss может очень пригодиться в делах поиска и устранения сетевых неполадок Linux-серверов. Конечно, для того, чтобы в полной мере освоить ss , неплохо будет почитать man и попрактиковаться. Однако, теперь у вас есть представление о том, как применять эту команду, которую просто необходимо знать современному администратору Linux.

Уважаемые читатели! Пользуетесь ли вы ss?

  • Блог компании RUVDS.com
  • Настройка Linux
  • Системное администрирование

21 пример команды ss

Команда 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)

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Как проверить открытые порты на своём компьютере. Что означают 0.0.0.0, :*, [::], 127.0.0.1. Как понять вывод NETSTAT

Почему важно знать, какие порты открыты на компьютере?

Открытый порт на вашем компьютере (если не настроен файервол для запрета входящих соединений) означает, что к вашему компьютеру можно подключиться из вне.

Если ваш компьютер заражён вредоносным программным обеспечением, таким как троян, бэкдор (вирусы, которые позволяют злоумышленнику удалённо подключаться к вашему компьютеру и управлять им), то обычно такой бэкдор открывает порт и прослушивает сеть, в ожидании входящего соединения. Хотя могут быть варианты, например, многие бэкдоры подключаются к компьютеру злоумышленника и ожидают команд — в этом случае правильнее говорить не об открытом порте, а об установленном соединении. Это распространённый способ поведения вредоносного ПО, поскольку в данном случае не требуется, чтобы у жертвы был белый IP (что для домашних компьютеров является редкостью). Поэтому важно проверять открытые порты и установленные сетевые соединения. Конечно, установленное соединение означает наличие открытого порта, но с технической точки зрения это всё-таки разные вещи.

Ещё один пример, когда нужно определить, какая именно служба прослушивает порт: вы пытаетесь установить сетевую службу (веб-сервер Apache или СУБД MySQL), а они не запускаются, так как какая-то другая служба уже заняла их порт, который они используют по умолчанию. В этом случае нужно найти эту службу и отключить её или настроить на работу с другим портом.

Но, как и во многих IT задачах (да и вообще во многих профессиональных сферах), получить данные это только самое начало. Главное — это правильно их истолковать и понять.

Поэтому в этой статье мы рассмотрим, как узнать, какие порты открыты, как проверить, какая служба прослушивает определённый порт, а также научимся правильно понимать вывод команды NETSTAT и аналогичных.

Как проверить открытые порты в Windows

В Windows есть команда netstat, которая отображает статистику протокола и текущих сетевых подключений TCP/IP.

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p протокол] [-r] [-s] [-x] [-t] [интервал]
-a Отображение всех подключений и портов прослушивания. -b Отображение исполняемого файла, участвующего в создании каждого подключения или порта прослушивания. Иногда известные исполняемые файлы содержат множество независимых компонентов. Тогда отображается последовательность компонентов, участвующих в создании подключения или порта прослушивания. В этом случае имя исполняемого файла находится снизу в скобках [], сверху находится вызванный им компонент, и так до тех пор, пока не достигнут TCP/IP. Заметьте, что такой подход может занять много времени и требует достаточных разрешений. -e Отображение статистики Ethernet. Может применяться вместе с параметром -s. -f Отображение полного имени домена (FQDN) для внешних адресов. -n Отображение адресов и номеров портов в числовом формате. -o Отображение ИД процесса каждого подключения. -p протокол Отображение подключений для протокола, задаваемых этим параметром. Допустимые значения: TCP, UDP, TCPv6 или UDPv6. Если используется вместе с параметром -s для отображения статистики по протоколам, допустимы следующие значения: IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP или UDPv6. -q Отображение всех подключений, портов прослушивания и ограниченных непрослушивающих TCP-портов. Ограниченные непрослушивающие порты могут быть или не быть связанными с активными подключениями -r Отображение содержимого таблицы маршрутов. -s Отображение статистики по протоколам. По умолчанию статистика отображается для протоколов IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP и UDPv6. Параметр -p позволяет указать подмножество выводимых данных. -t Отображение состояния разгрузки для текущего подключения. -x Отображение подключений, прослушивателей и общих конечных точек NetworkDirect. -y Отображение шаблона подключений TCP для всех подключений. Не может использоваться вместе с другими параметрами. interval Повторное отображение выбранной статистики с паузой между отображениями, заданной интервалом в секундах. Чтобы прекратить повторное отображение статистики, нажмите клавиши CTRL+C. Если этот параметр опущен, netstat напечатает текущую информацию о конфигурации один раз.

Используя команду со следующими ключами, можно посмотреть информацию о всех подключениях и прослушиваемых портах в Windows:

netstat -an

Как с помощью PowerShell проверить открытые порты в Windows

Get-NetTCPConnection — это PowerShell-эквивалент NETSTAT, запуск команды без опций возвращает результат аналогичный netstat (но только по TCP портам и соединениям!).

Get-NetTcpConnection

Чтобы вывести список открытых портов, используйте опцию -State со значением Listen:

Get-NetTcpConnection -State Listen

Командлет Get-NetUDPEndpoint получает текущую статистику для конечной точки UDP. Командлет возвращает свойства конечной точки UDP, например локальные и удалённые порты UDP. Если вы не укажете никаких параметров, командлет получит статистику для всех конечных точек UDP. Get-NetUDPEndpoint запущенный без опций вернёт локальный адрес и локальный порт.

Get-NetUDPEndpoint

А следующая команда покажет открытые на всех сетевых интерфейсах UDP порты:

Get-NetUDPEndpoint | Where-Object

Связанные статьи:

  • Как в PowerShell просмотреть открытые порты. Как узнать, какая программа прослушивает порт
  • Как в PowerShell просмотреть открытые порты UDP
  • Test-NetConnection: сканирование открытых/закрытых портов из PowerShell
  • Использование PortQry для проверки открытых портов TCP/UDP (сканер портов)

Как в Windows узнать, какая программа прослушивает порт (с помощью PowerShell)

В этом примере будет получено имя процесса, связанного с каждым открытым портом:

Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess,@> | Sort-Object -Property LocalPort | Format-Table

Эта команда покажет все процессы связанные с любой сетевой активностью (открытые порты, а также установленные соединения и другие статусы):

Get-NetTcpConnection | Select-Object LocalAddress,LocalPort,OwningProcess,@> | Sort-Object -Property LocalPort | Format-Table

Чтобы узнать, какая именно программа прослушивает определённый порт, используйте следующий набор команд:

$port='80'; Get-NetTcpConnection -State Listen | Where-Object | Select-Object LocalAddress,LocalPort,OwningProcess,@> | Sort-Object -Property LocalPort | Format-Table

Замените «80» в первой строке на порт, который вас интересует.

Чтобы просмотреть идентификатор процесса-владельца используемого порта UDP, запустите команду:

Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort,OwningProcess | Sort-Object -Property LocalPort | Format-Table

Используйте следующую команду, чтобы отобразить имя процесса, открывшего UDP порт:

Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort,OwningProcess,@> | Sort-Object -Property LocalPort | Format-Table


Как в Windows узнать, какая программа прослушивает порт (используя CMD)

Открытых для прослушивания портов может оказаться достаточно много и обычно они используются легитимными программами. Поэтому при анализе полученных данных также важно знать, какая именно служба прослушивает определённый порт.

Для поиска службы, можно добавить к команде NETSTAT опцию -b, которая означает показать исполнимый файл, прослушивающий порт:

netstat -anb

Также имеется альтернативный способ определения исполнимого файла, привязанного к порту. Для него откройте Командную строку Windows. Для этого нажмите сочетание клавиш Win+x, там выберите Windows PowerShell (Администратор). В открывшемся окне введите:

чтобы переключиться на Windows Console Host (обычную командную строку).

Там запустите команду вида:

for /f "tokens=1,2,3,4,5*" %i in ('netstat -aon ^| findstr ":80" ^| findstr /i listening') do echo %j %l & @tasklist | findstr %m

Эта команда найдёт службы, которые прослушивают 80 порт. Чтобы найти информацию о другом порте, замените в команде цифру 80 на интересующий вас порт.

Пример вывода в моём случае:

C:\Windows\system32>echo 0.0.0.0:80 LISTENING & 0.0.0.0:80 LISTENING httpd.exe 3576 Services 0 16 764 КБ C:\Windows\system32>echo [::]:80 LISTENING & [::]:80 LISTENING httpd.exe 3576 Services 0 16 764 КБ

Запись 0.0.0.0:80 означает, порт 80 для любых IPv4 адресов прослушивает служба httpd.exe (веб-сервер Apache). А запись [::]:80 — означает, что порт 80 для любых IPv6 адресов прослушивает та же самая служба httpd.exe (веб-сервер Apache). Мы ещё вернёмся к более подробному анализу данных далее в этой статье.

Менять порт в длинной команде не всегда удобно, поэтому рекомендую создать текстовый файл с именем port.bat, в этот файл скопируйте:

@ECHO OFF for /f "tokens=1,2,3,4,5*" %%i in ('netstat -aon ^| findstr ":%1" ^| findstr /i listening') do echo %%j %%l & @tasklist | findstr %%m

Сохраните и закройте этот файл.

Теперь в Windows PowerShell или в командной строке Windows с помощью команды cd перейдите в папку, куда вы сохранили файл. Например, я его сохранил в папку C:\Users\Alex\Documents\, тогда для перехода туда я выполняю:

cd C:\Users\Alex\Documents\

Теперь запустите файл командой вида:

.\port.bat ПОРТ

Где ПОРТ замените на интересующий вас порт, например, меня интересует порт 80, тогда:

.\port.bat 80

Вновь получаю аналогичный результат.

Если у вас множество портов прослушивает процесс svchost.exe, то чтобы разобраться, какие именно это службы, смотрите статью «Почему svchost.exe прослушивает много портов? Как узнать, какие именно программы открыли порты».

Как проверить открытые порты в Linux. Как узнать, какая служба прослушивает порт

Для Linux тоже есть команда netstat, но она, вроде как, теперь считается устаревшей и на её замену рекомендуется команда ss. Показываемая информация у ss и netstat очень похожи. Даже основные опции идентичны.

Итак, для вывода открытых портов TCP и UDP протоколов вместе с показом процессов, которые их прослушивают, используется команда:

sudo ss -tulpn

Чтобы вывести список установленных соединений для портов TCP и UDP, используйте команду:

sudo ss -tupn

Больше опций, а также больше способов найти, какие порты прослушиваются, смотрите в статье «4 способа узнать, какие порты прослушиваются в Linux».

Что означает вывод netstat и ss

Далее мы научимся понимать, что именно выводит netstat. Но для полного понимания нам нужно изучить немного теории — совсем кратко. Я расскажу только о том, что нам действительно понадобиться.

TCP и UDP

TCP и UDP это протоколы транспортного уровня. Самое главное что вам нужно о них знать: любой из них может использоваться для передачи информации.

Кстати, про протокол TCP вы практически наверняка слышали, по крайней мере должны были встречать запись TCP/IP — эта связка протоколов очень важна для Интернета. Протокол IP отвечает за то, куда отправлять данные, а TCP отвечает за непосредственную передачу данных и проверку их целостности.

Работу протокола TCP можно представить как создание соединения между двумя компьютерами, по этому соединению передаются данные. Внутри этого соединения данные проверяются на предмет повреждения — если какая-то часть повреждена, то она отправляется повторно.

Протокол UDP тоже передаёт данные, но вместо того, чтобы создавать устойчивое соединение, внутри которого данные проверяются на целостность, он только отправляет пакет данных на определённый адрес, при этом не осуществляется контроль, был ли покет доставлен без повреждений и был ли доставлен вообще. По сути это и есть главное отличие между этими протоколами.

LISTENING, ESTABLISHED, CLOSE_WAIT и другие состояния

Как вы можете увидеть в выводе команды netstat для протокола TCP доступны разные варианты состояний.

Самые популярные из них это LISTENING — означает, что порт прослушивает запущенное на данном компьютере приложение, что оно готово принять соединение, например, от другого компьютера или от другой службы, запущенной на этом же компьютере. Также применяются термины «открытый порт», «привязка порта».

ESTABLISHED означает уже установленное соединение. Пример такого соединения: веб-браузер инициализировал загрузку страницы сайта и пока данные передаются по этому соединению, у этого соединения статус ESTABLISHED.

Имеются и другие виды состояний, но для наших целей они не очень важны. По большому счёту нас интересует только LISTENING, так как это означает открытые порты на нашем компьютере и возможность подключаться к нему. Также нам важно состояние ESTABLISHED, поскольку оно означает, что данные уже передаются по сетевому соединению.

UDP и LISTENING

Про UDP уже сказано чуть выше, что этот протокол не создаёт соединений в том смысле, как это делает TCP. Поэтому для этого протокола нет никаких состояний соединения — это просто неприменимо к нему. По этой причине в графе Состояние для него никогда не пишется LISTENING. Но значит ли это, что UDP порт не может быть прослушиваемым? Нет! Порт UDP также может быть прослушиваемым и доступным для соединений. В том числе этот порт может использоваться вирусами и злоумышленниками, поэтому эти порты также подлежат исследованию.

Пример анализа открытых портов

Я начну с анализа открытых портов на Linux. Просто потому, что мне так проще, а затем мы постепенно перейдём изучить открытые порты на Windows.

Пример информации об открытых портах, полученных командой:

sudo ss -tulpn

Пример прослушиваемых портов на Linux:

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 10.0.2.15%enp0s3:68 0.0.0.0:* users:(("NetworkManager",pid=318,fd=17)) udp UNCONN 0 0 127.0.0.1:5300 0.0.0.0:* users:(("tor",pid=359,fd=7)) tcp LISTEN 0 128 127.0.0.1:9040 0.0.0.0:* users:(("tor",pid=359,fd=8)) tcp LISTEN 0 128 127.0.0.1:8118 0.0.0.0:* users:(("privoxy",pid=362,fd=3)) tcp LISTEN 0 128 127.0.0.1:9050 0.0.0.0:* users:(("tor",pid=359,fd=6)) tcp LISTEN 0 128 127.0.0.1:9475 0.0.0.0:* users:(("httpd",pid=553,fd=5),("httpd",pid=552,fd=5),("httpd",pid=551,fd=5),("httpd",pid=550,fd=5),("httpd",pid=549,fd=5),("httpd",pid=360,fd=5)) tcp LISTEN 0 128 *:80 *:* users:(("httpd",pid=553,fd=4),("httpd",pid=552,fd=4),("httpd",pid=551,fd=4),("httpd",pid=550,fd=4),("httpd",pid=549,fd=4),("httpd",pid=360,fd=4)) tcp LISTEN 0 128 *:22 *:* users:(("systemd",pid=1,fd=55)) tcp LISTEN 0 128 *:443 *:* users:(("httpd",pid=553,fd=7),("httpd",pid=552,fd=7),("httpd",pid=551,fd=7),("httpd",pid=550,fd=7),("httpd",pid=549,fd=7),("httpd",pid=360,fd=7)) tcp LISTEN 0 80 *:3306 *:* users:(("mysqld",pid=427,fd=21))

В выводимых данных имеются следующие поля:

  • Netid — протокол udp или tcp
  • State — состояние, для протоколов TCP здесь будет LISTEN (поскольку мы явно указали в опциях показать только прослушиваемые порты), а для протоколов UDP здесь будет UNCONN, то есть состояние неизвестно, но, на самом деле, это тоже прослушиваемые порты, которые позволяют подключаться из вне
  • Recv-Q — получено
  • Send-Q — отправлено
  • Local Address:Port — локальный адрес и порт, к которому привязана служба, то есть IP адрес и порт, которые прослушиваются
  • Peer Address:Port — удалённый адрес и порт, к которым выполнено соединение.

Рассмотрим, что означает запись 127.0.0.1:9050: она говорит о том, что прослушивается порт 9050. Причём он прослушивается только для IP адреса 127.0.0.1. Адрес 127.0.0.1 относится к так называемым Loopback, то есть это замыкающийся на себя, закольцованный адрес. Сетевой интерфейс с этим адресом называется петлевым. Пакеты, которые отправляются с компьютера на этот адрес, приходят на этот же самый компьютер (точнее говоря, они никуда даже не уходят). Доступ к этому адресу может иметь только служба, работающая на этом же самом компьютере. Отсюда важное следствие: хотя порт 9050 прослушивается, никто другой не может к нему подключиться из любой сети. Это же относится и к адресам из диапазона ::1/128 — это такие же адреса, но уже для IPv6, в IPv6 аналог для 127.0.0.1 это ::1 (тоже часто можно видеть в выводимой информации).

Смотрите также:

  • Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 1)
  • Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2)

Если прослушиваются какие-либо адреса из локальных

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • 127.0.0.0/8

то к таким портам могут подключиться только компьютеры, расположенные в этих самых локальных сетях (если не настроить особым образом маршрутизацию или проброску портов (port forwarding)).

Для вывода прослушиваемых портов и уже установленных сетевых подключений используйте следующую команду:

sudo ss -tupn

Звёздочка (*) вместо адреса или порта

Мы можем увидеть записи вроде *:80 или даже *:*

Здесь звёздочка означает любой адрес или любой порт. Например, *:80 в колонке Local Address:Port (Локальный адрес:Порт) означает, что прослушивается 80 порт сразу на всех сетевых интерфейсах, доступных в данной системе. То есть служба ответит на запрос к 80 порту откуда бы он не пришёл: из локальной сети, из глобальной сети (если есть прямое соединение и интерфейс с белым IP) или с закольцованного адреса — это неважно, служба всё равно примет это соединение.

Кстати, служба может прослушивать порт в соответствии со следующими правилами:

  • может прослушиваться конкретный порт для одного IP адреса
  • может прослушиваться конкретный порт для любого IP адреса

То есть порт должен в любом случае быть указан, поэтому для Local Address:Port (Локальный адрес:Порт) допустима запись *:80, но запись вида *:* никогда не встретится в этом столбце.

Для Peer Address:Port (Удалённый адрес:Порт) запись *:* означает, что принимаются соединения от любого IP, отправленные с любого порта.

Кстати, просто для справки: если ваш компьютер подключается к веб сайту, то веб сайты обычно работают на 80 и 443 портах. Следовательно, веб браузер подключается именно к 80 порту (или 443, если это безопасное HTTPS соединение). Но на вашем компьютере открывается новое соединение на каком угодно, но только не на 80 и 443 портах — обычно используются порты с номерами >30000, например, на вашем компьютере может быть открыто исходящее соединение с портом 42063 и оно будет адресовано к 80 порту какого-либо веб сервера.

Прослушиваемые порты IPv4 и IPv6 адресов в Linux

В Linux у программ netstat и ss имеется особенность вывода информации о прослушиваемых портах, когда прослушиваются одновременно IPv4 и IPv6 адреса — выводится информация только об IPv6 адресе! Возможно это связано с какими-то глубинными особенностями реализации ядра Linux, но в Windows, например, есть чёткое разделение и если служба одновременно прослушивает порт на IPv4 и IPv6 адресах, то информация об этой службе выводится два раза — пример этого почти в самом начале статьи, где мы ищем, какая служба прослушивает 80-й порт и в найденной информации нам дважды показана служба httpd.

Что означает 0.0.0.0 в netstat. Различные виды нотаций в netstat и ss

0.0.0.0 — это самый первый IP адрес. Но он относится к IP специального назначения (как например 127.0.0.1) и выполняет разные функции.

Обозначение 0.0.0.0 может иметь разное значение в зависимости от того, где используется. Когда говорят о прослушиваемых портах, это обозначение в Linux символизирует заполнитель, то есть означает «любой IP адрес».

Чем это отличается от * (звёздочки) или от записи . , которые также встречаются в выводе рассматриваемых программ? В программе ss IPv6 адрес 0:0:0:0:0:0:0:0 (который является аналогом IPv4 адреса 0.0.0.0) обозначается звёздочкой (*). Следовательно, в ss запись 0.0.0.0:* обозначает «любой IPv4 адрес с любого порта». А обозначение *:* символизирует «любой IPv6 адрес с любого порта».

В программе netstat также используется запись 0.0.0.0:* которая также обозначает «любой IPv4 адрес с любого порта».

Но в netstat для обозначения «любой IPv6 адрес с любого порта» используется . *

Помните об этих различиях, чтобы не запутаться. А также помните о том, что если показано, что прослушивается протокол tcp6 (IPv6), то одновременно может прослушиваться порт и на tcp (IPv4) — при этом данные в выводимой информации отсутствуют!

В Windows в качестве Local Address (Локального адреса), когда прослушивается любой IP адрес на определённом порту, используется запись вида 0.0.0.0:80 (в этом примере прослушивается любой IP адрес, доступный в системе, на 80 порту). Для IPv6 адресов в этом случае используется запись вида [::]:80.

В качестве внешнего адреса, когда доступно подключения с любого IP и с любого порта, для TCP протокола пишется 0.0.0.0:0, а для UDP протокола в этих же условиях пишется *:*. Что тоже не особо логично и сбивает с толку. Точнее говоря такое различие в обозначениях вытекает из разницы протоколов TCP и UDP.

Если информация относится к IPv6, то для TCP когда имеется ввиду любой адрес на любом порту, используется запись вида [::]:0. А для UDP используются одинаковые нотации как для IP, так и для IPv6, то есть *:*

Нужно помнить, что некоторые из этих обозначений пересекаются с нотациями из Linux, где они имеют своё собственное значение.

Чтобы чуть облегчить жизнь, я составил такую табличку, которую можно использовать в качестве шпаргалки:

Определённый локальный IPv4 адрес на определённом порту

Любой локальный IPv4 адрес на определённом порту

Определённый локальный IPv6 адрес на определённом порту

Любой локальный IPv6 адрес на определённом порту

Любой внешний IPv4 адрес на любом порту

Любой внешний IPv6 адрес на любом порту

Netstat (Windows)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *