Wie findet man ohne Prozess-ID heraus, welcher Dienst auf einem bestimmten Port eines Ubuntu-Servers lauscht?

Wie findet man ohne Prozess-ID heraus, welcher Dienst auf einem bestimmten Port eines Ubuntu-Servers lauscht?

Ich habe mich entschieden, diese Frage zu stellen, obwohl es viele ähnliche Fragen gibt, aber keine davon meine beantwortet hat.

  1. Ich überprüfe regelmäßig die Ports, auf denen mein Server lauscht.
  2. Mein Ubuntu-Betriebssystem durch die Ausgabe von lsb_relase -a:
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal
  1. Ich führe den Befehl aus netstat -tulpn4und 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         
  1. Ich habe viele Tools und Anleitungen verwendet, um herauszufinden, warum mein Server auf dem Port lauscht, 51820ohne eine Antwort zu finden.
  2. 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 51820die Ausgabe ist:
udp     UNCONN   0        0                                             0.0.0.0:51820                                             0.0.0.0:*                                                                                                     
udp     UNCONN   0        0                                                [::]:51820                                                [::]:*  
  1. Ich habe mir die folgenden Antworten angesehen und keine Lösung gefunden:

Nachdem ich im Internet nach dem Port gesucht hatte, 51820fand 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 grepder Manpage per man grepBefehl.

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 portdas 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 grepKommandos stehen:

  • --exclude-dir– Überspringen Sie alle Befehlszeilenverzeichnisse mit einem Namenssuffix, das dem Muster entspricht.

Und spezifische Ignorieren sysund procVerzeichnissein unserem konkreten Fall dient dazu, unerwünschte Ausgaben zu vermeiden.

Beispiel: grep --exclude-dir={dir1,dir2}vermeidet dir1 und dir2 während der Suche.

  • -roder -Rist rekursiv.
  • -nist die Zeilennummer.
  • -wsteht 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.
  • 51820in 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 51820der 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 -eFlagge 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 in porteinen 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.

verwandte Informationen