7 сетевых Linux-команд, о которых стоит знать системным администраторам

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

Netstat is used to display active TCP connections and related listening ports in the computer or system. Actually, there are more features provided by netstat like display statistics about network stack protocols, IPv4, IPv6, TCP, UDP, etc.

Команда netstat, входящая в стандартный набор сетевых инструментов UNIX, отображает различную network–related информацию, такую как сетевые подключения, статистику интерфейсов, таблицы маршрутизации, masquerade, multicast, и т.п.

В этой статье рассмотрим десять практических примеров использования команды netstat в Linux.

Время на прочтение

7 сетевых Linux-команд, о которых стоит знать системным администраторамЧасто мониторинг сетевой подсистемы операционной системы заканчивается на счетчиках пакетов, октетов и ошибок сетевых интерфейсах. Но это только 2й уровень модели OSI!
С одной стороны большинство проблем с сетью возникают как раз на физическом и канальном уровнях, но с другой стороны приложения, работающие с сетью оперируют на уровне TCP сессий и не видят, что происходит на более низких уровнях.

Я расскажу, как достаточно простые метрики TCP/IP стека могут помочь разобраться с различными проблемами в распределенных системах.

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

Этот материал — первый в серии статей, построенных на рекомендациях, собранных от множества знатоков Linux. А именно, я спросил у наших основных разработчиков об их любимых Linux-командах, после чего меня буквально завалили ценными сведениями. А именно, речь идёт о 46 командах, некоторые из которых отличает тот факт, что о них рассказало несколько человек.

7 сетевых Linux-команд, о которых стоит знать системным администраторам

В данной серии статей будут представлены все эти команды, разбитые по категориям. Первые 7 команд, которым и посвящена эта статья, направлены на работу с сетью.

On Linux we can kill an Established TCP Connection using tcpkill command.


For example, to drop all connection to/from a particular IP:

tcpkill host ipaddr

Or similary to kill all connection using port 21 at ethernet-1, by:

tcpkill -i eth1 port 21  

Similarly, i want to know what is the command to kill certain connection on windows, precisely windows 7. Like i can see a list of active connections by netstat -n, now i am wondering how to drop a particular or group of connections?

r0ca's user avatar

10 gold badges42 silver badges63 bronze badges

asked Feb 1, 2012 at 14:23

Johnydep's user avatar

answered Feb 1, 2012 at 14:47

Peter Hahndorf's user avatar

Peter Hahndorf

9 gold badges50 silver badges67 bronze badges

The Windows Sysinternals Suite contains a tool called TcpView. TcpView will show you all of the connections on your machine similar to netstat. It will also allow you to close the connection or kill the process hosting the connection.

answered Feb 1, 2012 at 14:29

heavyd's user avatar

18 gold badges154 silver badges177 bronze badges

As someone else mentioned, you can simplify all this by using “TcpView” by SysInternals by Microsoft – it is better because it doesn’t terminate the application, rather closes the questionable port connection.

answered Jan 4 at 19:01

John Neu-a-n's user avatar

CurrPorts (cports.exe) from Nirsoft provides a Windows interface to close the ports or at least to identify the processes that are holding it open. This is a pretty good debugging tool – helped me anyway:

The main window of CurrPorts displays the list of all currently opened TCP and UDP ports. You can select one or more items, and then close the selected connections, copy the ports information to the clipboard, or save it to HTML/XML/Text file. If you don’t want to view all available columns, or you want to change the order of the columns on the screen and in the files you save, select ‘Choose Column’ from the View menu, and select the desired columns and their order. In order to sort the list by specific column, click on the header of the desired column.

Community's user avatar

answered Aug 17, 2015 at 23:09

MediaWhapper's user avatar

Возможно, вам нужно посмотреть активные сетевые соединения на компьютере под управлением Windows. Это можно сделать несколькими способами. Вы можете открыть Центр управления сетями и общим доступом или работать с утилитой командной строки «netstat» (network statistics – сетевая статистика), которая позволяет обнаруживать сетевые проблемы и сетевой трафик; пользоваться этой утилитой довольно легко.

  1. Изображение с названием See Active Network Connections (Windows) Step 1

  2. Изображение с названием See Active Network Connections (Windows) Step 2

  3. Изображение с названием See Active Network Connections (Windows) Step 3

  4. Изображение с названием See Active Network Connections (Windows) Step 4

  5. Изображение с названием See Active Network Connections (Windows) Step 5

  6. Изображение с названием See Active Network Connections (Windows) Step 6

    Нажмите «Подробно». Откроется окно, в котором будет отображена подробная информация о вашем сетевом соединении.

  1. Изображение с названием See Active Network Connections (Windows) Step 7

  2. Изображение с названием See Active Network Connections (Windows) Step 8

    В строке поиска введите ncpa.cpl.

  3. Изображение с названием See Active Network Connections (Windows) Step 9

    В результатах поиска щелкните по «ncpa.cpl». Откроется окно «Сетевые подключения», в котором отобразятся активные сетевые соединения.

  4. Изображение с названием See Active Network Connections (Windows) Step 10

    Щелкните правой кнопкой мыши по интересующему вас сетевому подключению.

  5. Изображение с названием See Active Network Connections (Windows) Step 11

    В выпадающем меню нажмите «Состояние».

  6. Изображение с названием See Active Network Connections (Windows) Step 12

  1. Изображение с названием See Active Network Connections (Windows) Step 13

  2. Изображение с названием See Active Network Connections (Windows) Step 14

  3. Изображение с названием See Active Network Connections (Windows) Step 15

    Откроется окно командной строки (с черным фоном). В этом окне вы будете вводить команду netstat. Команда вводится с различными опциями, самые популярные из которых приведены ниже.

  4. Изображение с названием See Active Network Connections (Windows) Step 16

  5. Изображение с названием See Active Network Connections (Windows) Step 17

  6. Изображение с названием See Active Network Connections (Windows) Step 18

  7. Изображение с названием See Active Network Connections (Windows) Step 19

  8. Изображение с названием See Active Network Connections (Windows) Step 20

  1. Изображение с названием See Active Network Connections (Windows) Step 21

  2. Изображение с названием See Active Network Connections (Windows) Step 22

    Нажмите «Выполнить». Откроется окно с текстовой строкой.

  3. Изображение с названием See Active Network Connections (Windows) Step 23

  4. Изображение с названием See Active Network Connections (Windows) Step 24

    Откроется окно командной строки (с черным фоном). В этом окне вы будете вводить команду netstat. Команда вводится с различными опциями, самые популярные из которых приведены ниже.

  5. Изображение с названием See Active Network Connections (Windows) Step 25

  6. Изображение с названием See Active Network Connections (Windows) Step 26

  7. Изображение с названием See Active Network Connections (Windows) Step 27

  8. Изображение с названием See Active Network Connections (Windows) Step 28

  9. Изображение с названием See Active Network Connections (Windows) Step 29

Считаем соединения

Disclaimer: для иллюстрации работы с метриками в разных срезах я буду показывать наш интерфейс (dsl) работы с метриками, но это можно сделать и на opensource хранилищах.

В первую очередь мы разделяем все соединения на входящие (inbound) и исходящие (outbound) по отношению к серверу.

Каждое TCP соединения в определенный момент времени находится в одном из состояний, разбивку по которым мы тоже сохраняем (это иногда может оказаться полезным):

7 сетевых Linux-команд, о которых стоит знать системным администраторам

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

Здесь так же видно резкое падение общего количества соединений незадолго до 11 Jun, попробуем посмотреть на соединения в разрезе listen портов:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

На этом графике видно, что самое значительное падение было на порту 8014, посмотрим только 8014 (у нас в интерфейсе можно просто нажать на нужном элементе легенды):

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Попробуем посмотреть, изменилось ли количество входящий соединений по всем серверам?

Выбираем серверы по маске “srv10*”:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Теперь мы видим, что количество соединений на порт 8014 не изменилось, попробуем найти на какой сервер они мигрировали:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Мы ограничили выборку только портом 8014 и сделали группировку не по порту, а по серверам.

Теперь понятно, что соединения с сервера srv101 перешли на srv102.

Netlink

Почти все знают утилиту netstat в linux, она может показать все текущие TCP соединения и дополнительную информацию по ним. Но при большом количестве соединений netstat может работать достаточно долго и существенно нагрузить систему.

Есть более дешевый способ получить информацию о соединениях — утилита ss из проекта iproute2.

$ time netstat -an|wc -l
62109

real    0m0.467s
user    0m0.288s
sys     0m0.184s

$ time ss -ant|wc -l
62111

real    0m0.126s
user    0m0.112s
sys     0m0.016s

Ускорение достигается за счет использования протола netlink для запросов информации о соединениях у ядра. Наш агент использует netlink напрямую.

Display Information Interactively

If we need to list given options output interactively to monitor the metrics we can use interactive mode. Interactive mode is enabled by providing interval value to print output. This feature does not needs any option we will only provide interval value which is 2 in this case.

> netstat -s -p tcp 2

Display Only TCP Protocol

netstat command provides extensive filtering options according to protocols. We can provide a filter option with  -p and protocol name. In this example, we will filter and show only TCP protocol.

> netstat -p tcp
Display Only TCP Protocol
Display Only TCP Protocol

As we can see there is no UDP protocol related port and connection information.

Conntrack

Еще одна распространенная проблема — переполнение таблицы ip_conntrack в linux (используется iptables), в этом случае linux начинает просто отбрасывать пакеты.

Это видно по сообщению в dmesg:

ip_conntrack: table full, dropping packet

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

В окметре так же есть автоматический триггер, который уведомит, если таблица ip_conntrack заполнена более чем на 90%:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

На данном графике видно, что таблица переполнялась, лимит подняли и больше он не достигался.

TCP ретрансмиты

Отдельно мы показываем количество TCP ретрансмитов (повторных отправок TCP сегментов).

Само по себе наличие ретрансмитов не означает, что в вашей сети есть потери пакетов.
Повторная передача сегмента осуществляется, если передающий узел не получил от принимающего подтверждение (ACK) в течении определенного времени (RTO).

Данный таймаут расчитывается динамически на основе замеров времени передачи данных между конкретными хостами (RTT) для того, чтобы обеспечивать гарантированную передачу данных при сохранении минимальных задержек.

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

7 сетевых Linux-команд, о которых стоит знать системным администраторам

На данном графике мы видим 2 выброса ретрансмитов, в это же время процессы postgres утилизировали CPU данного сервера:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Cчетчики протоколов мы получаем из /proc/net/snmp.

Display Routing Table

Routing is used to set IP packets first-hop according to their destination. Our system route information can be listed with -r option.

> netstat -r
Display Routing Table
Display Routing Table

As we can see the default route is printed in the first line which IP address is 192.168.122.1 .

Display Fully Qualified Domain Name

Normally netstat will list hostnames in a simple manner and in a fast way. It can skip some domain names too. We can for netstat to print fully qualified domain names with -f option.

 > netstat -f
Display Fully Qualified Domain Name
Display Fully Qualified Domain Name

We can see that only resolved DNS names or fully qualified domain names are shown like oracle.com.

Команда ip

Синтаксис этой команды выглядит так:

ip <OPTIONS> <OBJECT> <COMMAND>

Самое важное тут — это <OBJECT> (подкоманда). Здесь можно использовать, помимо некоторых других, следующие ключевые слова:

  • address — адрес протокола (IPv4 или IPv6) на устройстве.
  • tunnel — IP-туннель.
  • route — запись таблицы маршрутизации.
  • rule — правило в базе данных политики маршрутизации.
  • vrf — управление виртуальными устройствами маршрутизации и перенаправления трафика.
  • xfrm — управление IPSec-политикой.

Ниже приведены примеры, демонстрирующие распространённые сценарии использования команды ip.

[root@server ~]# ip address show
[root@server ~]# ip address add 192.168.1.254/24 dev enps03
[root@server ~]# ip address del 192.168.1.254/24 dev enps03

Изменение статуса интерфейса, в данном случае — включение eth0:

[root@server ~]# ip link set eth0 up

Изменение статуса интерфейса, в данном случае — выключение eth0:

[root@server ~]# ip link set eth0 down

Изменение статуса интерфейса, в данном случае — изменение MTU eth0:

[root@server ~]# ip link set eth0 mtu 9000

Изменение статуса интерфейса, в данном случае — перевод eth0 в режим приёма всех сетевых пакетов:

[root@server ~]# ip link set eth0 promisc on

Добавление маршрута, используемого по умолчанию (для всех адресов), через локальный шлюз 192.168.1.254, который доступен на устройстве eth0:

[root@server ~]# ip route add default via 192.168.1.254 dev eth0

Добавление маршрута к 192.168.1.0/24 через шлюз на 192.168.1.254:

[root@server ~]# ip route add 192.168.1.0/24 via 192.168.1.254

Добавление маршрута к 192.168.1.0/24, который доступен на устройстве eth0:

[root@server ~]# ip route add 192.168.1.0/24 dev eth0

Удаление маршрута для 192.168.1.0/24, для доступа к которому используется шлюз 192.168.1.254:

[root@server ~]# ip route delete 192.168.1.0/24 via 192.168.1.254

Вывод маршрута к IP 10.10.1.4:

[root@server ~]# ip route get 10.10.1.4

Соответствие портов и процессов

Узнать, какой порт занимает определённая программа:

# netstat -ap | grep ssh
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 *:ssh                   *:*                     LISTEN      -
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      -

Выяснить, каким процессом используется определённый порт:

# netstat -an | grep ':80'

Display Numeric Presentation of Ports and Hostname

Host and ports generally have numeric and text presentations. netstat command by default try to resolve the hostname and port name into text format. If we need to get the host and port numeric information like IP address and the port number we can use -n option.

> netstat -n
Display Numeric Presentation of Ports and Hostname
Display Numeric Presentation of Ports and Hostname

Display Ethernet Statistics

Ethernet or MAC generally used for the same meaning. Ethernet is a Layer 2 protocol used to communicate in our LAN with other hosts and mostly with a gateway that is used to access other networks or the internet. We can list detailed information about the ethernet protocol. We will use -e option to list ethernet statistics.

> netstat -e
Display Ethernet Statistics
Display Ethernet Statistics
  • Received column is used to specify the received sizes.
  • Sent column is used to specify the sent sizes.
  • Bytes is used successfully completed transfers.
  • Unicast packets generally related to the UDP protocol where there is no connection and session management.
  • Non-unicast
  • Discards is the packets that are discarded because of the problems.
  • Errors show the sizes of the packets where errors occurred.
  • Unknown protocols show the protocols currently unknown by the TCP/IP stack.

Команда netstat

Инструмент netstat используется для вывода сведений о сетевых соединениях и таблицах маршрутизации, данных о работе сетевых интерфейсов, о masquerade-соединениях, об элементах групп многоадресной рассылки. Эта утилита является, как и ifconfig, частью пакета net-tools. В новом пакете iproute2 для достижения тех же целей используется утилита ss.

Если в вашей системе netstat отсутствует, установить эту программу можно так:

[root@server ~]# dnf install net-tools

Ей, в основном, пользуются, вызывая без параметров:

[root@server ~]# netstat

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

netstat <options>

Можно вызывать netstat и с несколькими параметрами, перечислив их друг за другом:

netstat <option 1> <option 2> <option 3>

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

[root@server ~]# netstat -a

Для вывода сведений обо всех TCP-портах применяется такой вариант команды:

[root@server ~]# netstat -at

Если нужны данные по UDP-портам — утилиту вызывают так:

[root@server ~]# netstat -au

Список портов любых протоколов, ожидающих соединений, можно вывести так:

[root@server ~]# netstat -l

Список TCP-портов, ожидающих соединений, выводится так:

[root@server ~]# netstat -lt

Так выводят список UDP-портов, ожидающих соединений:

[root@server ~]# netstat -lu

А так — список UNIX-портов, ожидающих соединений:

[root@server ~]# netstat -lx

Вот — команда для вывода статистических сведений по всем портам вне зависимости от протокола:

[root@server ~]# netstat -s

Так выводятся статистические сведения по TCP-портам:

[root@server ~]# netstat -st

Для просмотра списка TCP-соединений с указанием PID/имён программ используется такая команда:

[root@server ~]# netstat -tp

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

[root@server ~]# netstat -an | grep ‘:<port number>’

Неподдерживаемые системой семейства адресов

Опция netstat –verbose покажет подробный вывод, а в самом конце отобразит неподдерживаемые Address Family.

    netstat: no support for `AF IPX' on this system.
    netstat: no support for `AF AX25' on this system.
    netstat: no support for `AF X25' on this system.
    netstat: no support for `AF NETROM' on this system.

Команда ping

[root@server ~]# ping google.com
PING google.com (216.58.206.174) 56(84) bytes of data.
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=1 ttl=56 time=10.7 ms
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=2 ttl=56 time=10.2 ms
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=3 ttl=56 time=10.4 ms
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=4 ttl=56 time=10.4 ms
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=5 ttl=56 time=17.3 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 10.219/11.844/17.381/2.773 ms

В данном случае работу команды ping можно остановить, воспользовавшись сочетанием клавиш CTRL+C. В противном случае она будет выполнять запросы до тех пор, пока её не остановят. После каждой ping-сессии выводятся сводные данные, содержащие следующие сведения:

  • Min — минимальное время, которое требуется на получение ответа от пингуемого хоста.
  • Avg — среднее время, которое требуется на получение ответа.
  • Max — максимальное время, которое требуется на получение ответа.

Кроме того, среди данных, выводимых программой о пакетах, есть такой параметр, как TTL (Time To Live, время жизни пакета). Тут используются числовые значения TTL, указывающие на то, сколько шагов маршрутизации может пройти пакет. Это значение ещё известно как «лимит переходов» (hop limit).

Обычно, если запустить команду ping в её простом виде, не передавая ей дополнительные параметры, Linux будет пинговать интересующий пользователя хост без ограничений по времени. Если нужно изначально ограничить количество ICMP-запросов, например — до 10, команду ping надо запустить так:

[root@server ~]# ping -c 10 google.com

А для того чтобы увидеть лишь итоговый отчёт работы ping — можно воспользоваться ключом -q:

[root@server ~]# ping -c 10 -q google.com

В системах с несколькими сетевыми интерфейсами можно задавать конкретный интерфейс, которым должна пользоваться команда ping. Например, есть компьютер, имеющий интерфейсы eth0 и eth1. Если нужно, чтобы команда ping использовала бы интерфейс eth0 — надо запустить её так:

[root@server ~]# ping -I eth0 google.com
[root@server ~]# ping -I 10.233.201.45 google.com

Применяя эту команду, можно указать и то, какую версию протокола IP использовать — v4 или v6:

[root@server ~]# ping -4 google.com
[root@server ~]# ping -6 google.com

В процессе работы с утилитой ping вы столкнётесь с различными результатами. В частности, это могут быть сообщения о нештатных ситуациях. Рассмотрим три таких ситуации.

▍ Destination Host Unreachable

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

▍ Request timed out

Если результат работы ping выглядит именно так — это значит, что локальная система не получила, в заданное время, эхо-ответов от целевой системы. По умолчанию используется время ожидания ответа в 1 секунду, но этот параметр можно настроить. Подобное может произойти по разным причинам. Чаще всего это — перегруженность сети, сбой ARP-запроса, отбрасывание пакетов фильтром или файрволом и прочее подобное.

▍ Unknown host/Ping Request Could Not Find Host

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

О хорошем качестве связи между исследуемыми системами говорит уровень потери пакетов в 0%, а так же — низкое значение времени получения ответа. При этом в каждом конкретном случае время получения ответа варьируется, так как оно зависит от разных параметров сети. В частности — от того, какая среда передачи данных используется в конкретной сети (витая пара, оптоволокно, радиоволны).

Netstat Command Syntax

netstat OPTIONS
  • OPTIONS will set different options and arguments about the netstat command behavior.

Команда ifconfig

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

Об утилите

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

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

Получить справку об этой утилите можно здесь.

Эта утилита входит в пакет net-tools, поэтому необходимо установить именно этот пакет, чтобы у вас в системе появилась утилита netstat. В пакет net-tools также включены следующие инструменты: arp, ifconfig, rarp, nameif и route. Все они считаются устаревшими, но иногда используются по привычке системного администратора.

И так, чтобы установить net-tools выполните:

$ sudo apt install net-tools

Команда nslookup

Рассмотрим распространённые примеры использования этой команды.

Получение A-записи домена:

[root@server ~]# nslookup example.com

Просмотр NS-записей домена:

[root@server ~]# nslookup -type=ns example.com

Выяснение сведений о MX-записях, в которых указаны имена серверов, ответственных за работу с электронной почтой:

[root@server ~]# nslookup -query=mx example.com

Обнаружение всех доступных DNS-записей домена:

[root@server ~]# nslookup -type=any example.com

Проверка использования конкретного DNS-сервера (в данном случае запрос производится к серверу имён ns1.nsexample.com):

[root@server ~]# nslookup example.com ns1.nsexample.com
[root@server ~]# nslookup 10.20.30.40

Просмотр статистики для каждого протокола

Показать статистику всех портов: netstat -s

# netstat -s
Ip:
    11150 total packets received
    1 with invalid addresses
    0 forwarded
    0 incoming packets discarded
    11149 incoming packets delivered
    11635 requests sent out
Icmp:
    13791 ICMP messages received
    12 input ICMP message failed.
Tcp:
    15020 active connections openings
    97955 passive connection openings
    135 failed connection attempts
Udp:
    2841 packets received
    180 packets to unknown port received.
.....

Показать статистику только TCP портов: netstat -st

# netstat -st

Показать статистику только UDP портов: netstat -su

# netstat -su

Команда mtr

MTR (Matt’s traceroute) — это программа, работающая в режиме командной строки, представляющая собой инструмент для диагностики сетей и устранения сетевых неполадок. Эта команда совмещает в себе возможности ping и traceroute. Она, как traceroute, может выводить сведения о маршруте, по которому сетевые данные идут от одного компьютера к другому. Она выводит массу полезных сведений о каждом шаге маршрутизации, например — время ответа системы. Благодаря использованию команды mtr можно получить довольно подробные сведения о маршруте, можно обнаружить устройства, которые вызывают проблемы при прохождении данных по сети. Если, например, наблюдается рост времени ответа системы, или рост числа потерянных пакетов, это позволяет с уверенностью говорить о том, что где-то между исследуемыми системами возникла проблема с сетевым соединением.

Синтаксис команды выглядит так:

mtr <options> hostname/IP

Рассмотрим несколько распространённых способов применения mtr.

Если вызвать эту команду, указав лишь имя или адрес хоста — она выведет сведения о каждом шаге маршрутизации. В частности — имена хостов, сведения о времени их ответа и о потерянных пакетах:

[root@server ~]# mtr google.com
[root@server ~]# mtr -g google.com
[root@server ~]# mtr -b google.com

Так можно задать количество ping-пакетов, которые нужно отправить системе, маршрут к которой подвергается анализу:

[root@server ~]# mtr -c 10 google.com

А так можно получить отчёт, содержащий результаты работы mtr:

[root@server ~]# mtr -r -c 10 google.com > mtr-command-google-output

Вот — ещё один вариант получения такого отчёта:

[root@server ~]# mtr -rw -c 10 google.com > mtr-command-google-output

Для того чтобы принудительно использовать TCP вместо ICMP — надо поступить так:

[root@server ~]# mtr –tcp google.com

А вот так можно использовать UDP вместо ICMP:

[root@server ~]# mtr –udp google.com

Вот — вариант команды, где задаётся максимальное количество шагов маршрутизации:

[root@server ~]# mtr -m 35 216.58.223.78

Так можно настроить размер пакета:

[root@server ~]# mtr -r -s 50 google.com

Для вывода результатов работы mtr в формате CSV используется такая команда:

[root@server ~]# mtr –csv google.com

Вот — команда для вывода результатов работы mtr в формате XML:

[root@server ~]# mtr –xml google.com

Display Only IPv6 Ports and Sockets

We can use -p ipv6 option to filter and show only IPv6 connections about the netstat command.

> netstat -p ipv6

Детализация рулит

На самом деле мы работали с одной метрикой, просто она была сильно детализирована, индентификатор каждого экземпляра выглядит примерно так:

{name="netstat.connections.inbound.count", state="<TCP_STATE>", listen_ip="<IP>" listen_port="<PORT>" remote_ip="<REMOTE_IP>"}

Например, у одно из клиентов на нагруженном сервере-фронтенде снимается ~700 экземпляров этой метрики

Display Connection or Ports Process Name

> netstat -b
Display Connection or Ports Process Name
Display Connection or Ports Process Name

We can see from the output that chrome.exe. established a connection with a remote host over https protocol.

Display Only ICMP Protocol Statistics

We can list only ICMP related statistics with -s -p icmp option.

> netstat -s -p icmp
Display Only ICMP Protocol Statistics
Display Only ICMP Protocol Statistics
  • Messages: ICMP Messages.
  • Errors: ICMP Errors.
  • Destination Unreachable: ICMP Destination Unreachable Messages.
  • Echo Replies: ICMP Echo replies which are generally used for ping or ping command.

Display All TCP and UDP Connections with Listening Ports

TCP is the most used protocol for the transmission of packets between different hosts. In a regular usage for a host, there will be a lot of TCP connections in different phases. We can display all these connections with -a option like below.

> netstat -a
Display All TCP Connections
Display All TCP Connections
  • Proto is the protocol the listening port is running. Generally, TCP and UDP are used.
  • Local Address is the local or current system IP address and ports number. The IP address and the port number are delimited with the :. 0.0.0.0 means all local IP addresses or network interfaces where 127.0.0.1 means only localhost or current system.
  • Foreign Address is the remote IP address which is initiated a connection. Like Local address, IP address and the port number are delimited with the :.
  • State will provide the current status of the given port. A port can be listening which means accepting connections or CLOSED recently closed etc. More details about the port or TCP states can be found below.

TCP backlog

По метрикам TCP соединений можно не только диагностировать работу сети, но и определять проблемы в работе сервисов.

Например, если какой-то сервис, обслуживающий клиентов по сети, не справляется с нагрузкой и перестает обрабатывать новые соединения, они ставятся в очередь (backlog).

На самом деле очереди две:

  • SYN queue — очередь неустановленных соединений (получен пакет SYN, SYN-ACK еще не отправлен), размер ограничен согласно sysctl net.ipv4.tcp_max_syn_backlog;
  • Accept queue — очередь соединений, для которых получен пакет ACK (в рамках “тройного рукопожатия”), но не был выполнен accept приложением (очередь ограничивается приложением)

При достижении лимита accept queue ACK пакет удаленного хоста просто отбрасывается или отправляется RST (в зависимости от значения переменной sysctl net.ipv4.tcp_abort_on_overflow).

Наш агент снимает текущее и максимальное значение accept queue для всех listen сокетов на сервере.

Для этих метрик есть график и преднастроенный триггер, который уведомит, если backlog любого сервиса использован более чем на 90%:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Советы

  • В качестве альтернативы на сайте SysInternals скачайте программу TCPView.
  • Поэкспериментируйте с командами UNIX (упомянутая выше команда netstat также является командой UNIX). Эти команды можно найти в интернете при помощи поисковика.
  • Имейте в виду, что в Linux команда netstat больше не поддерживается, поэтому вместо нее используйте команды ip –s или ss, или ip route.

Маршрутизация ядра

Показать таблицу маршрутизации ядра: netstat -r

# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192.168.128.2   0.0.0.0         UG        0 0          0 eth0
192.168.128.0   *               255.255.255.0   U         0 0          0 eth0

Примечание: Используйте netstat -rn для просмотра маршрута в цифровом формате без разрешения имён узлов.

Разбивка по IP

Часто бывает необходимо посмотреть, сколько было соединений с различных IP адресов. Наш агент снимает количество TCP соединений не только с разбивкой по listen портам и состояниям, но и по удаленному IP, если данный IP находится в том же сегменте сети (для всех остальный адресов метрики суммируются и вместо IP мы показываем “~nonlocal”).

Рассмотрим тот же период времени, что и в предыдущих случаях:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Здесь видно, что соединений с 192.168.100.1 стало сильно меньше и в это же время появились соединения с 192.168.100.2.

Примеры работы и дополнительные опции

Активные подключения и прослушиваемые порты

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

Дополнительно можно отфильтровать информацию по типу протокола:

  • -t – выводить только tcp;
  • -u – выводить только udp;
  • -x – выводить только сокеты.

Эти опции можно совмещать, например следующая команда покажет все активные подключения и прослушиваемые порты только для tcp и udp соединений:

$ netstat -atu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0    268 192.168.0.35:ssh        pc-adm:64743            ESTABLISHED
tcp6       0      0 [::]:http               [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 [::]:https              [::]:*                  LISTEN

Из вывода выше мы видим что у нас есть tcp соединения и нет udp. В tcp соединениях видно одно в состоянии ESTABLISHED, это я подключен к серверу по протоколу ssh. Остальные имеют состояние LISTEN – это прослушиваемые порты. Наш сервер слушает следующие порты: ssh (22 порт), https (443 порт), http (80 порт).

Только прослушиваемые порты или сокеты

Перечислить все прослушиваемые порты, в том числе и сокеты можно с помощью опции -l. Здесь вы также можете ограничить вывод tcp, udp или linux сокетами.

Например, следующая команда выведет все прослушиваемые порты и сокеты, так как я не ограничиваю вывод определённым протоколом:

$ netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp6       0      0 [::]:http               [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 [::]:https              [::]:*                  LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     211      /run/systemd/journal/io.systemd.journal
unix  2      [ ACC ]     STREAM     LISTENING     802      /run/user/1000/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     811      /run/user/1000/gnupg/S.dirmngr
unix  2      [ ACC ]     STREAM     LISTENING     813      /run/user/1000/gnupg/S.gpg-agent.browser
unix  2      [ ACC ]     STREAM     LISTENING     815      /run/user/1000/gnupg/S.gpg-agent.extra
unix  2      [ ACC ]     STREAM     LISTENING     817      /run/user/1000/gnupg/S.gpg-agent.ssh
unix  2      [ ACC ]     STREAM     LISTENING     819      /run/user/1000/gnupg/S.gpg-agent
unix  2      [ ACC ]     STREAM     LISTENING     11882    /run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     11405    /run/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     11407    /run/systemd/userdb/io.systemd.DynamicUser
unix  2      [ ACC ]     STREAM     LISTENING     11408    /run/systemd/io.system.ManagedOOM
unix  2      [ ACC ]     STREAM     LISTENING     11420    /run/systemd/fsck.progress
unix  2      [ ACC ]     STREAM     LISTENING     11428    /run/systemd/journal/stdout
unix  2      [ ACC ]     SEQPACKET  LISTENING     11430    /run/udev/control

Для получения статистики по сетевым протоколам нужно использовать опцию -s. Здесь также можно ограничивать вывод по определённым протоколам, но нельзя использовать опцию -x.

Например следующая команда выведет статистику по протоколу udp:

$ netstat -su
Udp:
    314 packets received
    0 packets to unknown port received
    0 packet receive errors
    317 packets sent
    0 receive buffer errors
    0 send buffer errors
    IgnoredMulti: 3856905
UdpLite:
IpExt:
    InBcastPkts: 3856905
    InOctets: 424191584
    OutOctets: 6605615
    InBcastOctets: 229159529
    InNoECTPkts: 4157300
    InECT0Pkts: 10507

А ещё утилита netstat именует стандартные порты в имена протоколов, например порт 22 будет назван ssh, 80 – http, 443 – https. Но мы можем выключить это поведение используя опцию -nn.

Также эта утилита умеет выводить имена процессов, которые обслуживают подключения, или слушают порты. Для этого нужно использовать опцию -p. Но чтобы мы увидели названия процессов, нужно запускать утилиту netstat используя sudo.

  • netstat -ltnnp – вывести только прослушиваемые tcp порты. При этом не переводить ip адреса в имена хостов и не переводить номера портов в названия протоколов. Дополнительно вывести название процессов.
  • netstat -atunnpвывести все порты (прослушиваемые и активные). При этом выводить только сетевые порты (tcp и udp), а не сокеты. Не переводить ip адреса в имена хостов и не переводить номера портов в имена протоколов. А также вывести названия процессов участвующих в соединениях.

Пример последней команды показан здесь:

$ sudo netstat -atnnp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      402/sshd: /usr/sbin
tcp        0     52 192.168.0.35:22         192.168.0.14:64743      ESTABLISHED 4121/sshd: alex [pr
tcp6       0      0 :::80                   :::*                    LISTEN      403/apache2
tcp6       0      0 :::22                   :::*                    LISTEN      402/sshd: /usr/sbin
tcp6       0      0 :::443                  :::*                    LISTEN      403/apache2

Display Only IPv4 Ports and Sockets

We can use -p ip option to filter and show only IPv4 connections. This can be useful generally because the IPv6 protocol is not common.

> netstat -p ip

Display Only TCP Protocol Statistics

We can only list TCP protocol-related statistics with -s -p tcp option.

> netstat -s -p tcp
Display Only TCP Protocol Statistics
Display Only TCP Protocol Statistics
  • Active Opens will list currently opened connection count. In this example, this is 104.
  • aPassive Opens will list open connections but not transferred any data recently. In this example, this is 15.
  • Failed Connection Attempts will list connection tries or attempts not completed so there are no started connections which are 4.
  • Reset Connections will list connections that ended with the RST TCP flag.
  • Current Connections will list currently opened connection count which is 5 in this example.
  • Segments Received will list the count of received TCP segments.
  • Segments Sent will list the count of sent TCP segments.
  • Segments Retransmitted will list the count of retransmitted TCP segments.

Об этой статье

Display Connection or Ports Process ID

All ports and connections are opened and managed by processes in the operating system. For example, Apache is a web server and uses TCP 80 for listening to HTTP requests. We can list processes id of given connection or port with -o option.

> netstat -o
Display Connection or Ports Process ID
Display Connection or Ports Process ID

We can see that also PID or Process ID is provided which is the current application process ID which listens given port and interface.

Сетевые интерфейсы

Показать список сетевых интерфейсов: netstat -i

# netstat -i
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0   1911037      0      0 0       1382056      0      0      0 BMRU
lo        16436 0         0      0      0 0             0      0      0      0 LRU

Показать расширенную информацию об интерфейсах (аналогично ifconfig): netstat -ie

# netstat -ie
Kernel Interface table
eth0      Link encap:Ethernet  HWaddr 00:0c:29:68:4c:a4
          inet addr:192.168.128.134  Bcast:192.168.128.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe68:4ca4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24278 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11275 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:33203025 (33.2 MB)  TX bytes:665822 (665.8 KB)
          Interrupt:19 Base address:0x2000

Счетчики и ошибки протоколов

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

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

Попробуем что-то понять про эти выбросы входящего трафика:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Теперь мы видим, что это входящий UDP трафик, но здесь не видно первых из трех выбросов.
Дело в том, что счетчики пакетов по протоколам в linux увеличиваются только в случае успешной обработки пакета.

Попробуем посмотреть на ошибки:

7 сетевых Linux-команд, о которых стоит знать системным администраторам

А вот и наш первый пик — ошибки UDP:NoPorts (количество датаграмм, пришедших на UPD порты, которые никто не слушает)

Данный пример мы эмулировали с помощью iperf, и в первый заход не включили на сервер-приемщик пакетов на нужном порту.

Netstat -lnptux

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

  • -l все открытые порты (LISTEN)
  • -t по протоколу TCP
  • -u по протоколу UDP
  • -x по протоколу UNIX Socket
  • -n без резолва IP/имён
  • -p но с названиями процессов и PID-ами

Примечание: Не все процессы могут быть идентифицированы последним ключом, чужие процессы показаны не будут. Вы должны иметь права root чтобы увидеть всё.

# netstat -lnptux
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9614/nginx
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      601/sshd
udp        0      0 8.8.4.4:123             0.0.0.0:*                           574/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           574/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           574/ntpd
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     4233     826/python          /var/run/fail2ban/fail2ban.sock
unix  2      [ ACC ]     STREAM     LISTENING     8122     2561/mysqld         /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     160413   7301/php-fpm.conf   /var/run/php5-fpm.sock

Команда tcpdump

Утилита tcpdump предназначена для захвата и анализа пакетов.

Установить её можно так:

[root@server ~]# dnf install -y tcpdump

Прежде чем приступить к захвату пакетов, нужно узнать о том, какой интерфейс может использовать эта команда. В данном случае нужно будет применить команду sudo или иметь root-доступ к системе.

[root@server ~]# tcpdump -D

  1 eth0
  2 nflog
  3 nfqueue
  4 usbmon1
  5 any
  6 lo (Loopback)

Если нужно захватить трафик с интерфейса eth0 — этот процесс можно запустить такой командой:

[root@server ~]# tcpdump -i eth0

Или — такой, с указанием (через ключ -c) количества пакетов, которые нужно захватить:

[root@server ~]# tcpdump -i eth0 -c 10

▍ Захват трафика, идущего к некоему хосту и от него

Можно отфильтровать трафик и захватить лишь тот, который приходит от определённого хоста. Например, чтобы захватить пакеты, идущие от системы с адресом 8.8.8.8 и уходящие к этой же системе, можно воспользоваться такой командой:

[root@server ~]# tcpdump -i eth0 -c 10 host 8.8.8.8

Для захвата трафика, идущего с хоста 8.8.8.8, используется такая команда:

[root@server ~]# tcpdump -i eth0 src host 8.8.8.8

Для захвата трафика, уходящего на хост 8.8.8.8, применяется такая команда:

[root@server ~]# tcpdump -i eth0 dst host 8.8.8.8

▍ Захват трафика, идущего в некую сеть и из неё

Трафик можно захватывать и ориентируясь на конкретную сеть. Делается это так:

[root@server ~]# tcpdump -i eth0 net 10.1.0.0 mask 255.255.255.0

Ещё можно поступить так:

[root@server ~]# tcpdump -i eth0 net 10.1.0.0/24

Можно, кроме того, фильтровать трафик на основе его источника или места, в которое он идёт.

Вот — пример захвата трафика, отфильтрованного по его источнику (то есть — по той сети, откуда он приходит):

[root@server ~]# tcpdump -i eth0 src net 10.1.0.0/24

Вот — захват трафика с фильтрацией по сети, в которую он направляется:

[root@server ~]# tcpdump -i eth0 dst net 10.1.0.0/24

▍ Захват трафика, поступающего на некий порт и выходящего из некоего порта

Вот пример захвата трафика только для DNS-порта по умолчанию (53):

[root@server ~]# tcpdump -i eth0 port 53

Захват трафика для заданного порта:

[root@server ~]# tcpdump -i eth0 host 8.8.8.8 and port 53

Захват только HTTPS-трафика:

[root@server ~]# tcpdump -i eth0 -c 10 host www.google.com and port 443

Захват трафика для всех портов кроме 80 и 25:

[root@server ~]# tcpdump -i eth0 port not 80 and not 25

Display Only UDP Protocol

We can also filter and show only UDP protocol ports with -p udp option. Here we provided -a to list UDP too.

> netstat -p udp -a
Display Only UDP Protocol
Display Only UDP Protocol

As we can see there is no TCP related port or connection information in this example and all UDP ports are currently listening mode without a connection state. This is because the UDP protocol is a connectionless protocol that does not create a session for data transmission.

TCP States for netstat Command

As we know TCP protocol provides reliable data transfer between hosts. TCP implements sessions to provide this reliability. From start to end there are different states in a TCP session. Here the sequence and meaning of TCP states.

  • LISTENING means the port is listening but do not have any connection with a remote host
  • ESTABLISHED the connection established and communicating with the remote host
  • TIME_WAIT the connection is in a wait situations
  • CLOSE_WAIT the connection is the closing phase
  • CLOSED the connection is closed
  • SYN_RECEIVED the sync flag received to start the connection

Display IPv4 ve IPv6 Statistics

netstat command provides a lot of statistical information about the network stack. These statistics provide detailed metrics about protocols. We can list this statistical information with -s option.

> netstat -s
Display Statistics
Display Statistics
  • Packets Received: The total IP packets received.
  • Received Header Errors: The total number of headers errors of the received packets.
  • Received Address Errors: The total number of address errors of the received packets.
  • Unknown Protocols Received: The total number of protocols which is unknown.
  • Received Packets Discarded: The total number of packets that are discarded after received.

Работа утилиты

Если мы выполним netstat без дополнительных опций, то увидим активные сетевые соединения (Active Internet connections) и активные соединения с помощью сокетов (Active UNIX domain sockets).

$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0    216 192.168.0.35:ssh        pc-adm:64743 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    799      /run/user/1000/systemd/notify
unix  3      [ ]         DGRAM                    11402    /run/systemd/notify
unix  2      [ ]         DGRAM                    11418    /run/systemd/journal/syslog
unix  7      [ ]         DGRAM                    11424    /run/systemd/journal/dev-log
unix  7      [ ]         DGRAM                    11426    /run/systemd/journal/socket
unix  3      [ ]         STREAM     CONNECTED     12270    /run/systemd/journal/stdout
***

Выводимая информация для интернет соединений и соединений с помощью сокетов отличается.

Выводимые поля для интернет соединений:

  • Proto – протокол (tcp, udp).
  • Recv-Q – количество байтов, помещённых в буфер приёма TCP/IP, но не переданных приложению. Если это число высокое, то нужно проверить работоспособность приложения, которое работает с данным портом.
  • Send-Q – количество байтов, помещённых в буфер отправки TCP/IP, но не отправленных, или отправленных, но не подтверждённых. Высокое значение может быть связано с перегрузкой сети сервера.
  • Local Address – локальный адрес сервера. В обычных соединения, это адрес сервера на который пришло соединение. В прослушиваемых портах (LISTEN) – это диапазон адресов. Так 0.0.0.0:port – значит подключаться можно ко всем адресам сервера, а 192.168.0.35:port – значит подключаться можно только к этому адресу сервера.
  • Foreign Address – адрес второй стороны. В обычных соединения, это адрес с которого пришло соединение. В прослушиваемых портах (LISTEN) – это диапазон адресов. Так 0.0.0.0:* – значит подключаться можно с любых адресов и с любых портов, а например 192.168.0.50:* – значит подключаться можно только с этого адреса и с любых портов.
  • State – состояние подключения, или прослушивания.

Выводимые поля для соединений с помощью сокетов:

  • Proto – протокол (unix);
  • RefCnt – счётчик подключенных к этому сокету процессов;
  • Flags – флаги, я их не буду рассматривать;
  • Type – тип сокета
    • DGRAM – работает без установки соединения;
    • STREAM – с предварительной установкой соединения;
  • State – состояние коннекта
    • LISTENING – сокет ожидает запроса на подключение;
    • CONNECTED – сокет подключен;
    • DISCONNECTING – сокет отключен;
    • (пусто) – сокет не подключен к другому.
  • I-Node – номер i-node файла сокета;
  • Path – путь к файлу сокета.

Список сокетов, находящихся в состоянии LISTEN

Перечислить все прослушиваемые порты: netstat -l

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
udp        0      0 192.168.128.134:ntp     *:*

Перечислить прослушиваемые TCP порты: netstat -lt

# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN

Перечислить прослушиваемые UDP порты: netstat -lu

# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 *:bootpc                *:*
udp6       0      0 [::]:ntp                [::]:*

Перечислить прослушиваемые UNIX сокеты: netstat -lx

# netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     3141     /var/run/fail2ban/fail2ban.sock
unix  2      [ ACC ]     STREAM     LISTENING     20492    /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     23323    /var/run/php5-fpm.sock

Список всех портов (как прослушиваемых, так и нет)

Перечислить все порты: netstat -a

# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
udp6       0      0 fe80::20c:29ff:fe68:ntp [::]:*

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     20492    /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     23323    /var/run/php5-fpm.sock

Перечислить все TCP порты: netstat -at

# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
tcp        0      0 *:ssh                   *:*                     LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp        0      0 *:http                  *:*                     LISTEN

Перечислить все UDP порты: netstat -au

# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 localhost:domain        *:*
udp        0      0 *:bootpc                *:*
udp6       0      0 fe80::20c:29ff:fe68:ntp [::]:*

Итог

Мы познакомились с утилитой netstat, которая позволяет посмотреть информацию о сетевых подключениях к серверу или от него.

Рассмотрели следующие опции:

  • -a – посмотреть все порты (прослушиваемые и используемые в подключении);
  • -l – посмотреть только прослушиваемые порты;
  • -t – выводить только tcp порты;
  • -u – выводить только udp порты;
  • -x – выводить информацию только по unix сокетам;
  • -p – к выводу добавить информацию о процессе (имя и pid процесса);
  • -n – отключить преобразование ip адреса в имя компьютера;
  • -nn – отключить преобразование номера порта в имя протокола;
  • -s – отобразить статистику по различным сетевым протоколам.

Утилита netstat

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

Отображение PID и имени процесса в выводе netstat

Опция netstat -p добавит «PID/Program Name» в вывод netstat, и может быть совмещена с любым другим набором опций. Это очень полезно при отладке, для определения того, какая программа работает на определённом порту.

# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 org-ru-putty.vm.udf:www 52-106.plus.kerch:55723 ESTABLISHED 9486/nginx: worker
tcp        0      0 org-ru-putty.vm.udf:www 52-106.plus.kerch:55757 ESTABLISHED 9486/nginx: worker

Разрешение имён в выводе netstat

Это также ускорит вывод, так как netstat не станет выполнять ненужный поиск.

# netstat -an

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

# netsat -a --numeric-ports

# netsat -a --numeric-hosts

# netsat -a --numeric-users

Итоги

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Стоит ли делать перевод, продолжение этой статьи?

Проголосовали 274 пользователя.

Воздержались 28 пользователей.

Вывод информации netstat непрерывно

Опция netstat -c будет выводить информацию непрерывно, в стиле top, обновляя экран каждые несколько секунд.

# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 org-ru-putty.vm.udf:www 182.131.74.202:59933    FIN_WAIT2
tcp        0      0 org-ru-putty.vm.udf:www 182.131.74.202:63761    FIN_WAIT2
tcp        0      0 org-ru-putty.vm.udf:www 92-181-66-102-irk.:4585 ESTABLISHED
^C

Вместо заключения

  • детализация метрик очень важна
  • если где-то что-то может переполниться, нужно обязательно покрывать мониторингом такие места
  • мы снимаем еще много разного по TCP/IP (RTT, соединения с непустыми send/recv очередями), но пока не придумали, как c этим правильно работать

Примеры наших стандартных графиков можно посмотреть в нашем демо-проекте.
Там же можно постмотреть графики Netstat.

:/>  Проблемы с Mafia 3 и их решения: баги, вылеты, черные полосы

Оставьте комментарий