Linux информация о подключении

Sysadminium

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

Об утилите

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

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

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

Установка netstat

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

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

$ sudo apt install net-tools

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

Если мы выполним 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 — состояние подключения, или прослушивания.
Читайте также:  Linux mint создать скрипт

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

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

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

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

    Если утилита 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, используя dns, пытается присвоить имена ip-адресам. Так, какой-нибудь, условный компьютер, с адресом 192.168.0.14 будет назван как pc-adm. Мы можем выключить такое именование хостов используя опцию -n.

    А ещё утилита 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

    Итог

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

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

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

    Источник

Оцените статью
Adblock
detector