
Ich teste eine Anwendung, die ihre eigenen Ports öffnet (als Server für diese Ports fungiert und daher an diesen Ports lauscht) und bei der dieselbe Anwendung eine Verbindung zu Ports herstellt, die von anderen Anwendungen gebunden sind (als Client für diese Ports fungiert).
Ich möchte einen Überblick darüber erhalten, welche Ports die Anwendung erstellt und mit welchen Anwendungen und Ports sie sich verbindet.
Wie kann ich das machen?
Antwort1
netstat
Sie können hierfür verwenden . Siehe das Beispiel (ich habe nach gesucht ssh
):
netstat -putan | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1725/sshd
tcp 0 0 1.2.3.4:45734 1.2.3.5:22 ESTABLISHED 2491/ssh
tcp6 0 0 :::22 :::* LISTEN 1725/sshd
Erläuterung:
Ich verwende die Parameter häufig -putan
(weil sie einfach zu merken sind).
-p
: zeigt die PIDs der Anwendung/des Prozesses-u
: UDP-Ports/Verbindungen anzeigen-t
: TCP-Ports/Verbindungen anzeigen-a
: zeigt sowohl abhörende als auch nicht abhörende Sockets an-n
: numerische Ausgabe (keine DNS-Lookups für Hostnamen usw. durchführen)
In der Ausgabe oben sehen Sie, dass ein SSH-Daemon-Prozess ( sshd
) mit PID auf allen Netzwerkschnittstellen ( ) 1725
am Port lauscht . Außerdem ist ein SSH-Client-Prozess (PID ) mit der IP-Adresse an Portnummer verbunden , meine IP-Adresse ist und mein externer Port ist . Sie sehen, dass die Verbindung hergestellt ist. Daher bin ich über angemeldet .22
0.0.0.0
2491
1.2.3.5
22
1.2.3.4
45734
ssh
Antwort2
Ein weiteres Tool, das dies kann, istlsof
:
# lsof -i -a -p 1981
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:22 (LISTEN)
#
Die verwendeten Optionen sind wie folgt:
-i
um die von einem Prozess geöffneten Internet-Ports auszudrucken-a
um alle Optionen mit einem UND zu verknüpfen-p 1981
um die Ausgabe für den Prozess 1981 anzuzeigen-n
um die Hostnamensuche zu unterbinden und stattdessen die IP anzuzeigen-P
um die Dienstsuche zu unterbinden und stattdessen die Portnummer anzuzeigen
lsof
hat den Vorteil, dass Sie den zu prüfenden Prozess angeben können, anstatt ihn aus einer größeren Ausgabe herauszusuchen. netstat
ist auf Systemen zuverlässiger verfügbar, lsof
wird jedoch immer mehr zum Standard als früher.
Antwort3
Wir haben bereits gute Antworten, aber diese listen nur die Ports auf, die zum Zeitpunkt der Ausführung des Befehls geöffnet sind.
strace
ist das richtige Tool zum Überwachen der während der Anwendungslebensdauer geöffneten Verbindungen:
strace -e socket,connect,close -f -o hipchat.strace.txt hipchat
Die Ausgabe zeigt Ihnen zusätzliche Informationen wie UDP-Anfragen und geöffnete, aber geschlossene Verbindungen.
Antwort4
ss -a4 | less
Ich gehe davon aus, dass Sie von IPv4 sprechen ... Wenn nicht, können Sie die 4 im vorhergehenden Befehl durch 6 ersetzen. Der Parameter -a dient zum Anzeigen aller Ports (lauschende und nicht). Sie können den Parametern -n hinzufügen, wenn Sie die Namen in der Anzeige nicht auflösen möchten.