
Ich habe mich entschieden, diese Frage zu stellen, obwohl es viele ähnliche Fragen gibt, aber keine davon meine beantwortet hat.
- Ich überprüfe regelmäßig die Ports, auf denen mein Server lauscht.
- Mein Ubuntu-Betriebssystem durch die Ausgabe von
lsb_relase -a
:
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
- Ich führe den Befehl aus
netstat -tulpn4
und die Ausgabe zeigt einen unbekannten Port:
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
- Ich habe viele Tools und Anleitungen verwendet, um herauszufinden, warum mein Server auf dem Port lauscht,
51820
ohne eine Antwort zu finden. - Ich habe versucht:
sudo lsof -i :51820
- und erhielt eine leere Ausgabe.sudo netstat -ltnp | grep -w ':51820'
- und erhielt eine leere Ausgabe.sudo fuser 51820/udp
- und erhielt eine leere Ausgabe.sudo netstat -peanut | grep ":51820"
- die Ausgabe ist:
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
die Ausgabe ist:
udp UNCONN 0 0 0.0.0.0:51820 0.0.0.0:*
udp UNCONN 0 0 [::]:51820 [::]:*
- Ich habe mir die folgenden Antworten angesehen und keine Lösung gefunden:
- Wie kann man herausfinden, welches Programm auf einem bestimmten Port lauscht?
- 3 Möglichkeiten, um herauszufinden, welcher Prozess auf einem bestimmten Port lauscht
- Wie kann man herausfinden, welches Programm auf einem bestimmten Port lauscht?
- Wie können wir herausfinden, welcher Prozess einen bestimmten Port verwendet? [Duplikat]
Nachdem ich im Internet nach dem Port gesucht hatte, 51820
fand ich heraus, dass es der von mir installierte „Wireguard“ ist, der auf diesem Port lauscht, aber die Frage bleibt die gleiche, da ich sie bei keinem der von mir ausprobierten Befehle herausfinden konnte.
Antwort1
Sie verwenden ein Betriebssystem, das Wireguard als Kernelmodul implementiert. Ihr Kernel lauscht auf diesem Port, und da dieser Socket keinem Prozess gehört, wird von kein PID gemeldet netstat
.
Antwort2
Allgemein:
Nachdem ich zwei Tage lang zu diesem Problem gesucht hatte, stellte ich wie Michael Hampton und Peter Zhabin fest, dass es keine Lösung gibt, die eine Kernelprozess-ID über einen Abhörport anzeigt.
Darüber hinaus habe ich während dieser zwei Tage auch nach commands
Kombinationen gesucht, die die gewünschte Antwort liefern könnten, und habe hierfür weder eine einfache noch eine praktische Möglichkeit gefunden.
Die von mir erstellte Lösung ist vorläufig und ich bin sicher, dass sie von den Community-Mitgliedern verbessert werden kann.
Rabatte für die Lokalisierung des Prozesses
- Der Prozess wird auf Kernelebene oder einer anderen Ebene ausgeführt, wodurch vermieden wird, dass der Prozess eine ID (PID) hat.
- Die Prozess-ID oder das Prozessprogramm wurde in der Ausgabe der angegebenen Befehle nicht gefunden:
lsof
,netstat
,ss
,fuser
. - Wir haben in der Ausgabe der obigen Befehle einen Abhörport gefunden – aber wir können das Programm oder die PID, die das Abhören verursacht, nicht konfigurieren.
Um grep
:
Wir werden verwenden grep
, um weitere Informationen über den offenen Port zu finden.
grep
- Zeilen drucken, die Mustern entsprechen.
Von grep
der Manpage per man grep
Befehl.
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.
- Hierist ein großartiges Thema, wie der Befehl richtig und effektiv verwendet wird.
So finden Sie die PID oder das Programm, das den angegebenen Port verwendet grep
:
In meinem Fall hat die Ausführung sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -i port
das Problem gelöst und viele Informationen über das Programm angezeigt, das den Port verwendet.
Die gegebene Ausgabe:
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
Der Grund für die vielen Flags ist, dass andere Kombinationen, die ich ausprobiert habe, eine große Menge unerwünschter Ausgaben hatten.
Wofür die Argumente des grep
Kommandos stehen:
--exclude-dir
– Überspringen Sie alle Befehlszeilenverzeichnisse mit einem Namenssuffix, das dem Muster entspricht.
Und spezifische Ignorieren sys
und proc
Verzeichnissein unserem konkreten Fall dient dazu, unerwünschte Ausgaben zu vermeiden.
Beispiel: grep --exclude-dir={dir1,dir2}
vermeidet dir1 und dir2 während der Suche.
-r
oder-R
ist rekursiv.-n
ist die Zeilennummer.-w
steht für „Ganzes Wort abgleichen“./
steht für das „höchste“ Verzeichnis, um die Suche von oben nach unten zu starten.-e
- ist das bei der Suche verwendete Muster.51820
in unserem speziellen Fall ist es die Portnummer, die von einem der oben genannten Netzwerküberwachungsbefehle gefunden wurde.|
- ist die Pipe, um die Ausgabe des ersten Befehlsteils an den zweiten umzuleiten.
In unserem Fall: Umleitung sudo grep --exclude-dir={sys,proc} -rnw / -e 51820
der Ausgabe zum nächsten Befehlgrep -i port
-i
- Ignorieren Sie Groß-/Kleinschreibungsunterschiede in Mustern und Eingabedaten, sodass Zeichen, die sich nur in der Groß-/Kleinschreibung unterscheiden, übereinstimmen.port
- Gefunden, um die Ergebnisse auf den Zweck einzugrenzen, für den wir die Suche durchgeführt haben, und um weitere Informationen über den bestimmten Port zu finden, der nach der-e
Flagge definiert wurde.
Tipps:
- Machen Sie den Scan in den ersten Schritten so groß wie möglich, indem Sie im
/
Verzeichnis beginnen und zum Filtern der Ausgabe minimale Flags verwenden, um sicherzustellen, dass Sie keine Details verpassen, die wir erreichen könnten. - Nachdem Sie die gewünschte Ausgabe gefunden haben oder aufgrund vieler unerwünschter Ausgaben Probleme beim Finden der gewünschten Ausgabe auftreten, beginnen Sie, nacheinander Flags hinzuzufügen.
- Geben Sie die Portnummer als Muster an, schließlich ist dies unser Ausgangspunkt und unser Endziel.
- Verwenden Sie Doppelbefehle
grep
, die den ersten Scan inport
einen Musterfilter umleiten. Dies kann uns lokalisieren und die Lösung beschleunigen. Schließlich suchen wir nach einer Zahl als Muster und dies kann zu vielen unerwünschten Ergebnissen führen. - Wenn Sie mit den angezeigten Ergebnissen keine Schlussfolgerungen ziehen können, führen Sie im Internet eine Suche mit den von Ihnen gefundenen Schlüsselwörtern durch.