Netstat. Примеры использования в Linux, Windows и FreeBSD

Что такое netstat знает практически любой сисадмин, но на всякий случай освежим:

netstat (network statistic) - это утилита командной строки показывающая сетевые соединения (как входящие, так и исходящие), таблицы маршрутизации и различные статистики сетевых интерфейсов. Утилита присутвует как в Unix-like системах, так и в Windows.

Разница использования утилиты в разных операционных системах небольшая, в основном заключается в синтаксе, а именно в ключах. Мы будем разбирать примеры для Linux более подробно, а для Windows и FreeBSD указывать только сами команды.

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

Итак начнем.
 

1. Просмотр состояния всех сокетов (как прослушиваемых, так и имеющих другое состояние)
 

Вид команды одинаков для всех операционных систем - netstat -a
Вывод команды для Linux:

$ netstat -a | more

Proto Recv-Q Send-Q Local Address Foreign Address State
tcp        0      0 localhost.dbschen:mysql *:*                     LISTEN
tcp        0      0 *:8010                  *:*                     LISTEN
tcp        0      0 *:3307                  *:*                     LISTEN
tcp        0      0 *:netbios-ssn           *:*                     LISTEN
tcp        0      0 *:sunrpc                *:*                     LISTEN
tcp        0      0 localhost.dbschenk:8100 localhost.dbschen:43747 ESTABLISHED
tcp        0      0 localhost.:zabbix-agent localhost.dbschen:56439 TIME_WAIT
tcp        0      0 localhost.:zabbix-agent localhost.dbschen:56523 TIME_WAIT
tcp        0      0 localhost.:zabbix-agent localhost.dbschen:56492 TIME_WAIT
tcp        0      0 localhost.dbschenk:8789 localhost.dbschen:44400 ESTABLISHED
tcp        0      0 alex1812.local:49968    xenon.dbsc:microsoft-ds ESTABLISHED
tcp        0      0 localhost.dbschen:44402 localhost.dbschenk:8789 ESTABLISHED
tcp        1      0 alex1812.local:35685    srv103-131.vkontak:http CLOSE_WAIT

Активные сокеты домена UNIX (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Путь
unix  2      [ ]         DGRAM                    9643     /var/spool/postfix/de
v/log
unix  2      [ ACC ]     STREAM     LISTENING     13963    /tmp/ssh-QiVSHQBA3051
/agent.3051
unix  2      [ ACC ]     STREAM     LISTENING     12191    /tmp/gpg-QOeyf0/S.gpg
-agent
unix  2      [ ]         DGRAM                    13820    @
unix  2      [ ACC ]     STREAM     LISTENING     8984     /var/run/xdmctl/dmctl

Я думаю назначение каждого столбца в комментариях не нуждается, опишем только последний - state (состояние соединения)

Виды состояний (state):

ESTABLISHED - соединение установлено
SYN_SENT - сокет пытается установить соединение
SYN_RECV - начальная синхронизация соединения
FIN_WAIT1 - сокет закрыт, ожидание отключения соединения
FIN_WAIT2 - ожидание отключения удаленной стороны
TIME_WAIT - ожидание после закрытия повторной передачи отключения удаленной стороны
CLOSED - соединение закрыто, сокет не используется
CLOSE_WAIT - удаленный узел отключился, сокет скоро будет закрыт
LAST_ACK - сначала отключилась удаленная сторона, а затем сокет будет закрыт
LISTEN - сокет ожидает входящих соединений
CLOSING - закрытие сокета, точнее сокет закрыт, а затем отключился удаленный узел
UNKNOWN - состояние сокета неизвестно.

Просмотр только tcp соединений -

Для Линукс:
netstat -at

$netstat -at
Активные соединения с интернетом (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp        0      0 localhost.dbschen:mysql *:*                     LISTEN
tcp        0      0 *:8010                  *:*                     LISTEN
tcp        0      0 *:3307                  *:*                     LISTEN
tcp        0      0 *:netbios-ssn           *:*                     LISTEN
tcp        0      0 *:sunrpc                *:*                     LISTEN
tcp        0      0 *:http                  *:*                     LISTEN

Для Windows и FreeBSD команда выглядит:
 

netstat -a -p tcp

Просмотр только udp соединений:

Для Linux -
netstat -au

$netstat -au
Активные соединения с интернетом (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp        0      0 *:38905                 *:*
udp        0      0 *:nfs                   *:*
udp        0      0 *:35625                 *:*
udp        0      0 *:52138                 *:*

Для Windows и FreeBSD команда выглядит:
 

netstat -a -p udp

2. Просмотр всех сокетов в состоянии ожидания соединений (Listening)

Для Linux:

netstat -l
 

$netstat -l
 Активные соединения с интернетом (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp        0      0 localhost.dbschen:mysql *:*                     LISTEN
tcp        0      0 *:8010                  *:*                     LISTEN

Для freebsd -

netstat -a | egrep 'Proto|LISTEN'

Для Windows -
netstat -a | find "LISTENING"

Просмотр только ожидающих TCP соединений -

Linux:
netstat -lt

FreeBSD:
netstat -a -p tcp | egrep 'Proto|LISTEN'

Windows:
netstat -a -p TCP | find "LISTENING"

Для UDP-соединений -

Linux:
netstat -lu

FreeBSD:
netstat -a -p udp | egrep 'Proto|LISTEN'

Windows:
netstat -a -p udp | find "LISTENING"

Для Unix -сокетов
Linux:
netstat -lx

3. Показ статистики по каждому протоколу.

Для всех дистрибутивов -
netstat -s

 

$netstat -s
Ip:
    всего пакетов принято 11602420
    305 с неверными заголовками
    2392 с неверными адресами
    0 перенаправлено
    0 входящих пакетов отклонено
    входящих пакетов доставлено: 11573509
    запросов отправлено: 11868461
    исходящих пакетов сброшено: 2
    сброшено по причине отсутствия маршрута: 5
    фрагментов неудачно: 2
Icmp:
    ICMP сообщений получено: 521776
    неудачных входящих ICMP сообщений: 64562
    Гистограмма входа ICMP
        пункт назначения недоступен: 119819
        потери при прохождении: 10
        перенаправления: 50
        эхо-запросы: 31460
        эхо-ответы: 370437
    послано сообщений ICMP: 502403
    неудачные сообщения ICMP: 0
    Гистограмма выхода ICMP
        пункт назначения недоступен: 97014
        эхо-запросов: 373929
        эхо-ответы: 31460
IcmpMsg:
        InType0: 370437
        InType3: 119819
        InType5: 50
        InType8: 31460
        InType11: 10
        OutType0: 31460
        OutType3: 97014
        OutType8: 373929
Tcp:
    открытия активных соединений: 1120690
    открытия пассивных соединений: 499326
.....................................................

Также интересно:

Для конкретных протоколов (например TCP или UDP):

Linux:
TCP - netstat -st
UDP - netstat -su

Freebsd и Windows:
netstat -s -p TCP
netstat -s -p UDP

 

4. Показывать PID и имя программы

Для добавления поля PID/Program name в Linux используется ключ -p. Его можно использовать вместе с другими ключами.
Пример:
 

$ sudo netstat -pt
[sudo] password for alex1812:
Активные соединения с интернетом (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State       PID/Program name
tcp        0      0 localhost.dbschen:52466 localhost.dbschenk:http TIME_WAIT   -
tcp        0      0 alex1812.local:39568    192.168.17.1:http       TIME_WAIT   -
tcp        0      0 localhost.dbschenk:8100 localhost.dbschen:43747 ESTABLISHED 2202/.python.bin
tcp        0      0 alex1812.local:57709    domaindnszones.:loc-srv TIME_WAIT   -
tcp        0      0 localhost.dbschenk:8789 localhost.dbschen:44400 ESTABLISHED 2248/.python.bin
tcp        0      0 alex1812.local:49968    xenon.dbsc:microsoft-ds ESTABLISHED 1602/winbindd
tcp        0      0 localhost.dbschen:44402 localhost.dbschenk:8789 ESTABLISHED 2567/.python.bin
tcp        1      0 alex1812.local:35685    srv103-131.vkontak:http CLOSE_WAIT  3199/dolphin
tcp        0      0 localhost.dbschen:44400 localhost.dbschenk:8789 ESTABLISHED 2524/.python.bin

В windows это можно проделать с ключом -b и -o:

netstat -b -o

Для Freebsd у netstat такой функции нет, по-крайней мере я ее не нашел. Для этих целей можно использовать lsof

5. Не включать хост, порт и имя пользователя в вывод netstat

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

netstat -an | more
Активные соединения с интернетом (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8010            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN

Это же справедливо для FreeBSD и Windows.

Для Linux также можно использовать:
# netstat -a --numeric-ports

# netstat -a --numeric-hosts

# netstat -a --numeric-users


Соответственно преобразовывать в числовые значения имя порта, имя хоста или имя пользователя.

6. Выводить информацию непрерывно

Для Linux используем ключ -с, для вывода информации каждые несколько секунд

netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 alex1812-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
tcp        1      1 alex1812-laptop.loc:52564 101.11.169.230:www      CLOSING
tcp        0      0 alex1812-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
tcp        1      1 alex1812-laptop.loc:42367 101.101.34.101:www      CLOSING
^С

Для Windows используется ключ -o
netstat -o 5 - выводить каждые 5 секунд.

7. Поиск не поддерживаемых семейств адресов в системе

В линукс используем ключ --verbose

$netstat --verbose
................
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

8. Просмотр таблицы маршрутизации

Для всех систем используем netstat -r

$netstat -r
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags MSS Window irtt Iface
default         10.218.138.249  0.0.0.0         UG        0 0          0 eth0
10.218.138.0    *               255.255.255.0   U         0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0

Для Linux и FreeBSD используем ключ -rn для преобразования имен хостов в ip-адреса

$ netstat -rn
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0         10.218.138.249  0.0.0.0         UG        0 0          0 eth0
10.218.138.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

9. Узнаем на каком порту работает программа

Для Linux:
 

sudo netstat -ap | grep ssh
[sudo] password for alex1812:
tcp        0      0 *:ssh                   *:*                     LISTEN      16055/sshd
tcp        0    180 alex1812.local:ssh      alshipilov.dbsche:63256 ESTABLISHED 19954/sshd: alex181
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      16055/sshd
unix  2      [ ACC ]     STREAM     LISTENING     13963    3100/ssh-agent      /tmp/ssh-QiVSHQBA3051/agent.3051
unix  3      [ ]         STREAM     CONNECTED     5908135  19954/sshd: alex181
unix  3      [ ]         STREAM     CONNECTED     5906061  19954/sshd: alex181
unix  2      [ ]         DGRAM                    5906060  19954/sshd: alex181

Или наоборот узнаем какой процесс работает на определенном порту:
 

netstat -an | grep ':80'

10. Отображение списка сетевых интерфейсов и информации по ним:

Для Linux и FreeBSD:

$netstat -i
Таблица интерфейсов ядра
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0   6413932      0      4 0       6171755      0      0      0 BMRU
lo        16436 0   6223876      0      0 0       6223876      0      0      0 LRU

Расширенная информация по интерфейсам (для линукс):
 

$ netstat -ie
Таблица интерфейсов ядра
eth0      Link encap:Ethernet  HWaddr 70:71:bc:71:d5:95
          inet addr:192.168.1.5 Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::7271:bcff:fe71:d595/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6416050 errors:0 dropped:4 overruns:0 frame:0
          TX packets:6173575 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1672869297 (1.6 GB)  TX bytes:703106243 (703.1 MB)
          Interrupt:20 Память:fb200000-fb220000

lo        Link encap:Локальная петля (Loopback)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:6225387 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6225387 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:793200119 (793.2 MB)  TX bytes:793200119 (793.2 MB)

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

Интересное на сайте: 
0
Голосов пока нет