Введение
В этом практическом занятии (лабораторной работе) вы узнаете, как проверить, открыт ли определенный сетевой сокет в Linux. Понимание того, как определять и проверять активные сетевые сокеты, является фундаментальным навыком для устранения неполадок и мониторинга сети.
С помощью практических упражнений вы будете использовать мощные инструменты командной строки, такие как ss и netstat, чтобы перечислить и отфильтровать сетевые соединения. Вы также изучите файловую систему /proc/net, чтобы получить более глубокое понимание деталей сокетов, что обеспечит комплексный подход к проверке статуса сетевых сокетов в вашей системе.
Проверка сокетов с помощью команды ss -tuln
На этом этапе вы узнаете, как использовать команду ss для проверки сетевых сокетов в своей системе Linux. Сокеты являются конечными точками для отправки и приема данных по сети. Понимание того, как просматривать активные сокеты, является важным для устранения неполадок и мониторинга сети.
Команда ss представляет собой мощный инструмент для исследования сокетов. Мы будем использовать ее с следующими параметрами:
-t: Отображать TCP - сокеты.-u: Отображать UDP - сокеты.-l: Отображать слушающие сокеты (сокеты, ожидающие соединений).-n: Не разрешать имена служб (отображать номера портов вместо имен).
Если терминал еще не открыт, откройте его. Вы можете найти значок Xfce Terminal слева на рабочем столе.
Теперь введите следующую команду и нажмите Enter:
ss -tuln
Вы увидите вывод, похожий на следующий:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:5900 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:25 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 128 [::1]:631 [::]:*
tcp LISTEN 0 128 [::]:5900 [::]:*
tcp LISTEN 0 128 [::1]:25 [::]:*
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:631 0.0.0.0:*
udp UNCONN 0 0 [::1]:323 [::]:*
udp UNCONN 0 0 [::]:631 [::]:*
Разберем вывод:
Netid: Тип сокета (например,tcp,udp).State: Состояние сокета (например,LISTENозначает, что он ожидает соединения).Recv-Q: Количество полученных байтов в очереди.Send-Q: Количество отправленных байтов в очереди.Local Address:Port: Локальный IP - адрес и номер порта, к которым привязан сокет.0.0.0.0и[::]указывают, что сокет слушает на всех доступных сетевых интерфейсах (соответственно IPv4 и IPv6).Peer Address:Port: Удаленный IP - адрес и номер порта, к которому подключен сокет.*означает, что сокет слушает соединения от любого удаленного адреса.
Этот вывод показывает, какие службы запущены и ожидают соединений в вашей системе. Например, можно увидеть, что SSH (порт 22), CUPS (порт 631), VNC (порт 5900) и почтовый сервер (порт 25) ожидают соединений.
Понимание этого вывода является первым шагом в диагностике проблем сетевого подключения или выявлении потенциально нежелательных служб, работающих в вашей системе.
Нажмите Продолжить, чтобы перейти к следующему шагу.
Проверка сокетов с помощью netstat -tuln
На этом этапе вы будете использовать другую команду, netstat, для проверки сетевых сокетов. Команда netstat старее, чем ss, но все еще широко используется и предоставляет похожую информацию о сетевых соединениях, таблицах маршрутизации и статистике интерфейсов.
Мы будем использовать netstat с теми же параметрами, что и ss, чтобы увидеть слушающие TCP - и UDP - сокеты без разрешения имен служб:
-t: Отображать TCP - сокеты.-u: Отображать UDP - сокеты.-l: Отображать слушающие сокеты.-n: Не разрешать имена служб.
Введите следующую команду в терминале и нажмите Enter:
netstat -tuln
Вы увидите вывод, похожий на следующий:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 :::5900 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp 0 0 0.0.0.0:631 0.0.0.0:*
udp6 0 0 ::1:323 :::*
udp6 0 0 :::631 :::*
Обратите внимание, что вывод команды netstat -tuln очень похож на вывод команды ss -tuln. Обе команды предоставляют информацию о протоколе (Proto), локальном адресе и порте (Local Address), внешнем адресе и порте (Foreign Address) и состоянии соединения (State).
В то время как ss обычно считается быстрее и информативнее в сложных сценариях, netstat по-прежнему представляет собой ценный инструмент в вашем арсенале команд Linux. Хорошей практикой является знакомство с обеими командами.
Теперь вы успешно использовали как ss, так и netstat для просмотра слушающих сокетов. Это фундаментальный навык для понимания сетевой активности в вашей системе.
Нажмите Продолжить, чтобы перейти к следующему шагу.
Проверка деталей сокетов в /proc/net
На этом этапе вы будете изучать каталог /proc/net, который предоставляет подробную информацию о сетевом стеке и сетевых протоколах в ядре Linux. Именно отсюда команды типа ss и netstat получают свои данные.
Файловая система /proc представляет собой виртуальную файловую систему, которая предоставляет информацию о процессах и другой системной информации. Это мощный способ проверить внутреннее состояние ядра.
Внутри /proc/net вы найдете файлы, содержащие необработанные данные о сетевых соединениях. Например, файлы tcp, udp, tcp6 и udp6 содержат информацию о активных TCP - и UDP - сокетах (соответственно для IPv4 и IPv6).
Давайте посмотрим на содержимое файла tcp. Введите следующую команду в терминале и нажмите Enter:
cat /proc/net/tcp
Вы увидите вывод, похожий на следующий:
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
0: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 12345 1 0000000000000000 0
1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 67890 1 0000000000000000 0
... (more lines)
Этот вывод менее удобочитаем, чем вывод ss или netstat, так как это необработанные данные ядра. Каждая строка представляет TCP - сокет и содержит различные поля, в том числе:
sl: Индекс в списке сокетов.local_address: Локальный IP - адрес и порт в шестнадцатеричном формате.0100007F- это шестнадцатеричное представление127.0.0.1(адрес петли обратной связи), а0019- шестнадцатеричное представление порта 25.rem_address: Удаленный IP - адрес и порт в шестнадцатеричном формате.st: Состояние сокета (например,0Aпредставляет состояниеLISTEN).tx_queue: Размер очереди передачи.rx_queue: Размер очереди приема.uid: Идентификатор пользователя, владеющего сокетом.inode: Номер inode сокета.
Вы также можете просмотреть UDP - сокеты, посмотрев содержимое файла /proc/net/udp:
cat /proc/net/udp
Для IPv6 - сокетов вы можете проверить файлы /proc/net/tcp6 и /proc/net/udp6.
Хотя обычно вы не будете напрямую разбирать эти файлы в повседневной работе, понимание того, откуда берутся сетевые данные, дает более глубокое представление о том, как Linux управляет сетевыми соединениями. Команды типа ss и netstat по сути считывают и форматируют данные из этих файлов для более легкого понимания.
Теперь вы изучили необработанную информацию о сокетах, доступную в файловой системе /proc/net.
Нажмите Продолжить, чтобы завершить лабораторную работу.
Резюме
В рамках данной лабораторной работы вы научились проверять, открыт ли определенный сетевой сокет в системе Linux с использованием различных инструментов командной строки. Сначала вы использовали команду ss с параметрами -tuln для отображения слушающих TCP - и UDP - сокетов, а также поняли, что означают столбцы вывода, такие как Netid, State, Local Address:Port и Peer Address:Port.
После использования команды ss вы обычно проверяли информацию о сокетах с помощью команды netstat, которая предоставляет аналогичную сетевую статистику. Наконец, вы изучили, как проверить подробную информацию о сокетах непосредственно из файловой системы /proc/net, которая дает более низкоуровневый взгляд на сетевой стек. Эти шаги представляют собой комплексный подход к идентификации и изучению открытых сетевых сокетов в системе Linux.



