Рейтинг:6

Как узнать, какая служба прослушивает определенный порт сервера Ubuntu без идентификатора процесса?

флаг in

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

  1. Я периодически проверяю порты, которые слушает мой сервер.
  2. Моя ОС ubuntu по выходу lsb_relase -a:
Идентификатор дистрибьютора: Ubuntu
Описание: Ubuntu 20.04.3 LTS
Релиз: 20.04
Кодовое название: фокальный
  1. я запускаю команду netstat -tulpn4 и вывод показывает неизвестный порт:
TCP 0 0 127.0.0.53:53 0.0.0.0:* ПРОСЛУШАТЬ 580/systemd-разрешить 
TCP 0 0 0.0.0.0:62176 0.0.0.0:* ПРОСЛУШАТЬ 900/sshd: /usr/sbin 
TCP 0 0 0.0.0.0:1122 0.0.0.0:* ПРОСЛУШАТЬ 1158/sshd: имя пользователя    
TCP 0 0 0.0.0.0:3333 0.0.0.0:* ПРОСЛУШАТЬ 1158/sshd: имя пользователя    
удп 0 0 0.0.0.0:51820 0.0.0.0:* -                   
udp 0 0 127.0.0.53:53 0.0.0.0:* 580/systemd-разрешение 
udp 0 0 X.X.X.X:1194 0.0.0.0:* 870/openvpn         
  1. Я использовал множество инструментов и руководств, чтобы выяснить, почему мой сервер прослушивает порт. 51820 не найдя ответа.
  2. Я пытался:
    • судо lsof -я :51820 - и получил пустой вывод.
    • судо netstat -ltnp | grep -w ':51820' - и получил пустой вывод.
    • Судо фьюзер 51820/udp - и получил пустой вывод.
    • sudo netstat -арахис | грэп ":51820" - выход:
удп 0 0 0.0.0.0:51820 0.0.0.0:* 0 26262 -                   
udp6 0 0 :::51820 :::* 0 26263 - 
  • судо сс -нлп | группа 51820 вывод:
udp UNCONN 0 0 0.0.0.0:51820 0.0.0.0:*                                                                                                     
udp UNCONN 0 0 [::]:51820 [::]:*  
  1. Я просмотрел следующие ответы и не нашел решения:

После поиска в Интернете о порте 51820 Я обнаружил, что это «wireguard», который я установил, который прослушивает этот порт, но вопрос остается тем же, что и в любой команде, которую я пробовал, я не смог этого выяснить.

anx avatar
флаг fr
anx
связанный: [wireguard не прослушивает порт] (https://serverfault.com/questions/1015322/the-wireguard-not-listening-on-port-after-started)
CrazyTux avatar
флаг in
@anx tnx за ваш комментарий, моя служба «wireguard» работает нормально, и все же ответы в соответствующем посте не решают мою проблему обнаружения процесса, который вызывает прослушивание определенного порта с помощью команды терминала.
djdomi avatar
флаг za
затем обновите вопрос, чтобы он был более конкретным. Вы ходите вокруг своей проблемы, которую хотите решить.
CrazyTux avatar
флаг in
Как я могу быть более конкретным? Я действительно пытаюсь получить ответ на заголовок вопроса, и я перечислил все решения, которые я уже пробовал.
Рейтинг:5
флаг cn

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

Michael Hampton avatar
флаг cz
Как узнать, какая служба ядра прослушивает этот порт?
Peter Zhabin avatar
флаг cn
Однажды я провел довольно много времени, копаясь в коде ядра, чтобы выяснить, есть ли способ сделать это, и обнаружил, что ядро ​​записывает ссылку на модуль, владеющий сокетом, в поле `proto_ops` сокета ядра, но я не знаю из пользовательских инструментов, которые могли бы сбросить его.
CrazyTux avatar
флаг in
Ваш ответ великолепен и очень помог, если вы узнаете, как сбросить эти сокеты ядра и отредактировать их в своем ответе, я подтвержу это, я проголосовал за информативный ответ.
Michael Hampton avatar
флаг cz
@CrazyTux Я также посмотрел на это и обнаружил, что ядро ​​​​не экспортирует эту информацию в пользовательскую среду. Я не думаю, что это возможно, если обновление ядра каким-то образом не обеспечит эту функциональность.
Рейтинг:2
флаг in

Общий:

После двухдневного поиска, который я провел по этой проблеме, я обнаружил, как Майкл Хэмптон и Питер Жабин, что не существует существующего решения, которое бы показывало идентификатор процесса ядра через прослушивающий порт.

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

Созданное мной решение является предварительным, и я уверен, что члены сообщества могут его улучшить.

Скидки за локализацию процесса

  • Процесс выполняется на уровне ядра или на любом другом уровне, который не позволяет процессу иметь идентификатор (PID).
  • Идентификатор процесса или программа процесса не были найдены выводом данных команд: lsof, нетстат, SS, фьюзер.
  • Мы нашли прослушивающий порт из вывода вышеуказанных команд, но мы не можем настроить программу или pid, которые вызывают прослушивание.

О grep:

Мы будем использовать grep чтобы найти больше информации об открытом порте.

grep - печатать строки, соответствующие шаблонам.

От grep справочная страница через человек grep команда.

ОПИСАНИЕ
grep ищет ШАБЛОНЫ в каждом ФАЙЛЕ. ШАБЛОНЫ — это один или несколько
       шаблоны, разделенные символами новой строки, и grep печатает каждую строку
       который соответствует образцу. Обычно ШАБЛОНЫ следует заключать в кавычки, когда grep
       используется в команде оболочки.
  • Здесь отличная тема о том, как правильно и эффективно использовать команду.

Как найти PID или программу, использующую данный порт через grep:

В моем случае выполнение sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -я порт решил проблему и показал много информации о программе, использующей порт.

Данный вывод:

iptables.service:6:ExecStart=/usr/sbin/iptables -I ВВОД -p udp --dport 51820 -j ПРИНЯТЬ
/home/username/wireguard-install.sh:238: читать -p "Порт [51820]:" порт
/home/username/wireguard-install.sh:241: читать -p "Порт [51820]:" порт
/home/username/wireguard-install.sh:243: [[ -z "$port" ]] && port="51820"
/usr/share/doc/netplan/examples/wireguard.yaml:9: порт: 51820
/etc/wireguard/wg0.conf:8:ListenPort = 51820
/etc/systemd/system/wg-iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ПРИНЯТЬ
/etc/systemd/system/wg-iptables.service:10:ExecStop=/usr/sbin/iptables -D INPUT -p udp --dport 51820 -j ПРИНЯТЬ

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

Какие аргументы grep Команда означает:

  • --exclude-dir - Пропустить любой каталог командной строки с суффиксом имени, который соответствует шаблон.

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

Пример: grep --exclude-dir={dir1,dir2} будет избегать dir1 и dir2 во время поиска.

  • или же является рекурсивным.
  • это номер строки.
  • -w означает соответствие всему слову.
  • / обозначает «самый высокий» каталог, чтобы начать поиск сверху вниз.
  • - это шаблон, используемый во время поиска.
  • 51820 в нашем конкретном случае это номер порта, который был найден одной из приведенных выше команд мониторинга сети.
  • | - это канал для перенаправления вывода первой части команды на вторую.

В нашем случае: перенаправление sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 вывод в следующую команду grep -я порт

  • - Игнорировать различия регистра в шаблонах и входных данных, чтобы символы, которые отличаются только в случае совпадения друг с другом.
  • порт - Найден для того, чтобы сузить результаты до цели, для которой мы выполнили поиск, найдя больше информации о конкретном порте, который был определен после флаг.

Советы:

  • Сделайте сканирование как можно большим на первых шагах, начав с / каталоге и используя минимальные флаги для фильтрации вывода, чтобы гарантировать, что вы не пропустите ни одной детали, которую мы могли бы получить.
  • После нахождения нужного вывода или возникновения проблем с поиском нужного вывода, вызванных выделением нежелательного вывода, начните добавлять флаги один за другим.
  • Укажите номер порта в качестве шаблона, ведь это наша отправная точка и наша конечная цель.
  • Используйте двойной grep команды, перенаправляющие первое сканирование в порт фильтр шаблонов, он может нас засечь и ускорить решение, ведь мы ищем число как шаблон и это может привести ко многим нежелательным результатам.
  • Если вы не можете сделать выводы с данным выводом, выполните поиск в Интернете с выбранными ключевыми словами, которые вы нашли.

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

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.