
Я решил опубликовать этот вопрос, хотя подобных вопросов много, но ни один из них не дал ответа на мой.
- Я периодически проверяю порты, которые прослушивает мой сервер.
- Моя ОС Ubuntu по выводу
lsb_relase -a
:
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
- Я запускаю команду
netstat -tulpn4
, и вывод показывает неизвестный порт:
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 580/systemd-resolve
tcp 0 0 0.0.0.0:62176 0.0.0.0:* LISTEN 900/sshd: /usr/sbin
tcp 0 0 0.0.0.0:1122 0.0.0.0:* LISTEN 1158/sshd: username
tcp 0 0 0.0.0.0:3333 0.0.0.0:* LISTEN 1158/sshd: username
udp 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-resolve
udp 0 0 X.X.X.X:1194 0.0.0.0:* 870/openvpn
- Я использовал множество инструментов и руководств, чтобы выяснить, почему мой сервер прослушивает порт,
51820
но так и не нашел ответа. - Я пытался:
sudo lsof -i :51820
- и получил пустой вывод.sudo netstat -ltnp | grep -w ':51820'
- и получил пустой вывод.sudo fuser 51820/udp
- и получил пустой вывод.sudo netstat -peanut | grep ":51820"
- вывод:
udp 0 0 0.0.0.0:51820 0.0.0.0:* 0 26262 -
udp6 0 0 :::51820 :::* 0 26263 -
sudo ss -nlp | grep 51820
выходной сигнал:
udp UNCONN 0 0 0.0.0.0:51820 0.0.0.0:*
udp UNCONN 0 0 [::]:51820 [::]:*
- Я просмотрел следующие ответы и не нашел решения:
После поиска информации о порте в Интернете 51820
я обнаружил, что это установленный мной «wireguard», который прослушивает этот порт, но вопрос остается тем же, так как ни одна команда, которую я пробовал, не могла этого выяснить.
решение1
Вы используете операционную систему, которая реализует Wireguard как модуль ядра. Ваше ядро прослушивает этот порт, и поскольку нет процесса, владеющего этим сокетом, PID не сообщается netstat
.
решение2
Жанр:
После двух дней поисков по этой проблеме я, как и Майкл Хэмптон и Питер Жабин, обнаружил, что не существует решения, которое отображало бы идентификатор процесса ядра через прослушиваемый порт.
Кроме того, в течение этих двух дней я также искал какие-то commands
комбинации, которые могли бы дать желаемый ответ, и не нашел ни одного простого или удобного способа сделать это.
Созданное мной решение является предварительным, и я уверен, что члены сообщества смогут его улучшить.
Скидки за локализацию процесса
- Процесс выполняется на уровне ядра или любом другом уровне, что позволяет избежать необходимости иметь идентификатор (PID) процесса.
- Идентификатор процесса или программа процесса не были найдены в выводе указанных команд:
lsof
,netstat
,ss
,fuser
. - Мы нашли прослушиваемый порт из вывода приведенных выше команд, но мы не можем настроить программу или pid, вызывающий прослушивание.
О grep
:
Мы воспользуемся этим grep
, чтобы найти дополнительную информацию об открытом порте.
grep
- печатать линии, соответствующие шаблонам.
Из grep
страницы руководства через man grep
команду.
DESCRIPTION
grep searches for PATTERNS in each FILE. PATTERNS is one or more
patterns separated by newline characters, and grep prints each line
that matches a pattern. Typically PATTERNS should be quoted when grep
is used in a shell command.
- Здесьотличная тема о том, как правильно и эффективно использовать эту команду.
Как найти PID или программу, использующую данный порт через grep
:
В моем случае выполнение sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -i port
решило проблему и показало выделенную информацию о программе, использующей порт.
Данный вывод:
iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
/home/username/wireguard-install.sh:238: read -p "Port [51820]: " port
/home/username/wireguard-install.sh:241: read -p "Port [51820]: " port
/home/username/wireguard-install.sh:243: [[ -z "$port" ]] && port="51820"
/usr/share/doc/netplan/examples/wireguard.yaml:9: port: 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 ACCEPT
/etc/systemd/system/wg-iptables.service:10:ExecStop=/usr/sbin/iptables -D INPUT -p udp --dport 51820 -j ACCEPT
Причина такого большого количества флагов в том, что другие комбинации, которые я пробовал, давали большой объем нежелательного вывода.
grep
Что означают аргументы командования:
--exclude-dir
- Пропустить любой каталог командной строки с суффиксом имени, соответствующим шаблону.
И конкретное игнорирование sys
и proc
каталогив нашем конкретном случае чтобы избежать нежелательного вывода.
Пример: grep --exclude-dir={dir1,dir2}
будет избегать dir1 и dir2 во время поиска.
-r
или-R
рекурсивно.-n
номер строки.-w
означает совпадение всего слова./
обозначает «самый высокий» каталог, чтобы начать поиск сверху вниз.-e
- шаблон, используемый при поиске.51820
в нашем конкретном случае — это номер порта, который был найден одной из команд мониторинга сети, приведенных выше.|
- это канал для перенаправления вывода первой части команды во вторую.
В нашем случае: перенаправление sudo grep --exclude-dir={sys,proc} -rnw / -e 51820
вывода на следующую командуgrep -i port
-i
- Игнорировать различия регистра в шаблонах и входных данных, чтобы символы, отличающиеся только регистром, соответствовали друг другу.port
- Найдено для того, чтобы сузить результаты до цели, для которой мы выполнили поиск, найдя больше информации о конкретном порте, который был определен после флага-e
.
Советы:
- На первых этапах сделайте сканирование максимально масштабным, начав с каталога
/
и используя минимальные флаги для фильтрации вывода, чтобы убедиться, что вы не упустите ни одной детали, которую мы могли бы получить. - После нахождения нужного вывода или возникновения проблем с его поиском из-за большого количества ненужного вывода начните добавлять флаги один за другим.
- Укажите номер порта в качестве шаблона, ведь это наша отправная точка и наша конечная цель.
- Используйте двойные
grep
команды, перенаправляя первое сканирование вport
фильтр шаблонов, это может точно определить нас и ускорить решение, в конце концов, мы ищем число как шаблон, а это может привести ко многим нежелательным результатам. - Если вы не можете сделать выводы на основе предоставленных результатов, выполните поиск в Интернете по выбранным ключевым словам, которые вы нашли.