GNU/Linux >> LINUX-Kenntnisse >  >> Linux

10 Beispiele für Linux ss-Befehle zur Überwachung von Netzwerkverbindungen

ss - Socket-Statistiken

In einem früheren Tutorial haben wir gesehen, wie man den Befehl netstat verwendet, um Details über die Netzwerk-/Socket-Verbindungen zu erhalten. Der Befehl netstat ist jedoch seit langem veraltet und wurde durch den Befehl ss aus der iproute-Suite von Tools ersetzt.

Der Befehl ss kann Details zu Netzwerkverbindungen mit mehr Informationen anzeigen als der Befehl netstat und ist schneller. Der Befehl netstat liest verschiedene /proc-Dateien, um Informationen zu sammeln. Dieser Ansatz ist jedoch langsamer, wenn viele Verbindungen anzuzeigen sind.

Der Befehl ss bezieht seine Informationen direkt aus dem Kernel-Space. Die mit den ss-Befehlen verwendeten Optionen sind denen von netstat sehr ähnlich, was es zu einem einfachen Ersatz macht.

Daher werden wir in diesem Tutorial einige Beispiele dafür sehen, wie man den Befehl ss verwendet, um die Netzwerkverbindungen und Socket-Statistiken zu überprüfen.

1. Alle Verbindungen auflisten

Der einfachste Befehl ist, alle Verbindungen aufzulisten.

$ ss | less
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port
u_str  ESTAB      0      0                    * 15545                 * 15544
u_str  ESTAB      0      0                    * 12240                 * 12241
u_str  ESTAB      0      0      @/tmp/dbus-2hQdRvvg49 12726                 * 12159
u_str  ESTAB      0      0                    * 11808                 * 11256
u_str  ESTAB      0      0                    * 15204                 * 15205
.....

Wir leiten die Ausgabe an less weiter, damit die Ausgabe scrollbar ist. Die Ausgabe enthält alle TCP-, UDP- und Unix-Socket-Verbindungsdetails.

2. TCP-, UDP- oder Unix-Verbindungen herausfiltern

Um nur TCP-, UDP- oder Unix-Verbindungen anzuzeigen, verwenden Sie die Option t, u oder x.

$ ss -t
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
ESTAB      0      0           192.168.1.2:43839     108.160.162.37:http
ESTAB      0      0           192.168.1.2:43622     199.59.149.201:https
ESTAB      0      0           192.168.1.2:33141      83.170.73.249:ircd
ESTAB      0      0           192.168.1.2:54028     74.125.135.125:xmpp-client
$ ss -t
OR
$ ss -A tcp

Standardmäßig meldet die Option "t" allein nur die Verbindungen, die "hergestellt" oder VERBUNDEN sind. Sie meldet nicht die TCP-Sockets, die "LISTENING" sind. Verwenden Sie die Option "-a" zusammen mit t, um zu melden sie alle auf einmal.

Alle UDP-Verbindungen auflisten

$ ss -ua
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
UNCONN     0      0           192.168.1.2:48268                  *:*
UNCONN     0      0           192.168.1.2:56575                  *:*
UNCONN     0      0                     *:40309                  *:*
UNCONN     0      0           192.168.1.2:56879                  *:*
UNCONN     0      0                     *:49014                  *:*
UNCONN     0      0           192.168.1.2:53124                  *:*
UNCONN     0      0             127.0.1.1:domain                 *:*
$ ss -a -A udp
The a option tells ss to report both "CONNECTED" and "LISTENING" sockets. Since UDP is a connection-less protocol, just "ss -u" will not report anything in most cases. Therefore we use the "a" option report all UDP connections (connected and listening).

Verwenden Sie in ähnlicher Weise die Option x, um alle Unix-Socket-Verbindungen aufzulisten.

3. Hostnamen nicht auflösen

Um die Ausgabe schneller zu erhalten, verwenden Sie die Option "n", um zu verhindern, dass ss IP-Adressen in Hostnamen auflöst. Dies verhindert jedoch auch die Auflösung von Portnummern.

$ ss -nt
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80
ESTAB      0      0             192.168.1.2:51350      74.125.200.84:443
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667
ESTAB      0      0             192.168.1.2:54028     74.125.135.125:5222
ESTAB      0      0             192.168.1.2:48156      66.196.120.44:5050

4. Nur Listening Sockets anzeigen

Dadurch werden alle Listening-Sockets aufgelistet. Beispielsweise öffnet der Apache-Webserver eine Socket-Verbindung auf Port 80, um auf eingehende Verbindungen zu warten.

$ ss -ltn
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      5                 127.0.1.1:53                       *:*
LISTEN     0      128               127.0.0.1:631                      *:*
LISTEN     0      128                     ::1:631                     :::*

Der obige Befehl listet alle „lauschenden“ „tcp“-Verbindungen auf. Die Option n deaktiviert die Hostnamenauflösung der IP-Adressen, wodurch die Ausgabe schneller wird.

Um alle lauschenden UDP-Verbindungen aufzulisten, ersetzen Sie t durch u

$ ss -lun
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
UNCONN     0      0                 127.0.1.1:53                       *:*
UNCONN     0      0                         *:68                       *:*
UNCONN     0      0               192.168.1.2:123                      *:*
UNCONN     0      0                 127.0.0.1:123                      *:*
UNCONN     0      0                         *:123                      *:*
UNCONN     0      0                         *:5353                     *:*
UNCONN     0      0                         *:47799                    *:*
UNCONN     0      0                         *:25322                    *:*
UNCONN     0      0                        :::54310                   :::*
.....

5. Prozessnamen und PID ausgeben

Um den Prozessnamen/PID auszugeben, dem die Verbindung gehört, verwenden Sie die p-Option

$ ss -ltp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*
LISTEN     0      128           127.0.0.1:9050                   *:*
LISTEN     0      128                   *:90                     *:*
LISTEN     0      128                   *:db-lsp                 *:*        users:(("dropbox",3566,32))
LISTEN     0      5             127.0.0.1:6600                   *:*
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0))

In der obigen Ausgabe enthält die letzte Spalte den Prozessnamen und die PID. In diesem Beispiel ist dnsmasq der Prozessname und 1299 die PID.

$ sudo ss -ltp
[sudo] password for enlightened:
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*        users:(("master",2051,12))
LISTEN     0      128                   *:90                     *:*        users:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx",1697,6),("nginx",1696,6))
LISTEN     0      5             127.0.0.1:6600                   *:*        users:(("mpd",2392,5))
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7))
LISTEN     0      16                    *:2633                   *:*        users:(("oned",1853,16))
LISTEN     0      50            127.0.0.1:mysql                  *:*        users:(("mysqld",1095,10))
LISTEN     0      5             127.0.1.1:domain                 *:*        users:(("dnsmasq",1347,5))
LISTEN     0      32                    *:ftp                    *:*        users:(("vsftpd",1051,3))
LISTEN     0      128                   *:ssh                    *:*        users:(("sshd",1015,3))
LISTEN     0      128           127.0.0.1:ipp                    *:*        users:(("cupsd",688,11))
LISTEN     0      128                  :::http                  :::*        users:(("apache2",5322,4),("apache2",5321,4),("apache2",5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4))
LISTEN     0      128                  :::ssh                   :::*        users:(("sshd",1015,4))
LISTEN     0      128                 ::1:ipp                   :::*        users:(("cupsd",688,10))

6. Zusammenfassende Statistiken drucken

Die Option s druckt die Statistik.

$ ss -s
Total: 526 (kernel 0)
TCP:   10 (estab 7, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total     IP        IPv6
*	  0         -         -
RAW	  0         0         0
UDP	  15        9         6
TCP	  10        9         1
INET	  25        18        7
FRAG	  0         0         0

7. Timer-Informationen anzeigen

Mit der Option '-o' würden die Zeitinformationen jeder Verbindung angezeigt. Die Timer-Informationen sagen, wie lange mit

$ ss -tn -o
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80
ESTAB      0      0             192.168.1.2:36335     204.144.140.26:80     timer:(keepalive,26sec,0)
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667
ESTAB      0      0             192.168.1.2:58857      74.121.141.84:80     timer:(keepalive,23sec,0)
ESTAB      0      0             192.168.1.2:42794     173.194.40.239:80     timer:(keepalive,32sec,0)

8. Nur IPv4- oder IPv6-Socket-Verbindungen anzeigen

Um nur IPv4-Socket-Verbindungen anzuzeigen, verwenden Sie die Option „-finet“ oder „-4“.

$ ss -tl -f inet
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100           127.0.0.1:smtp                   *:*
LISTEN     0      128           127.0.0.1:9050                   *:*
LISTEN     0      128                   *:90                     *:*
LISTEN     0      128                   *:db-lsp                 *:*
LISTEN     0      5             127.0.0.1:6600                   *:*

Um nur IPv6-Verbindungen anzuzeigen, verwenden Sie die Option „-finet6“ oder „-6“.

$ ss -tl6
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      100                 ::1:smtp                  :::*
LISTEN     0      128                  :::12865                 :::*
LISTEN     0      128                  :::http                  :::*
LISTEN     0      128                  :::ssh                   :::*
LISTEN     0      128                 ::1:ipp                   :::*

9. Verbindungen nach TCP-Status filtern

Der Befehl ss unterstützt Filter, die verwendet werden können, um nur bestimmte Verbindungen anzuzeigen. Der Filterausdruck sollte nach allen Optionen angehängt werden. Der Befehl ss akzeptiert Filter im folgenden Format.

$ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]

Hier sind nun einige Beispiele, wie Socket-Verbindungen nach Socket-Status gefiltert werden können.
Um alle Ipv4-TCP-Sockets anzuzeigen, die sich im Status "verbunden" befinden.

$ ss -t4 state established
Recv-Q Send-Q         Local Address:Port             Peer Address:Port
0      0                192.168.1.2:54436          165.193.246.23:https
0      0                192.168.1.2:43386          173.194.72.125:xmpp-client
0      0                192.168.1.2:38355           199.59.150.46:https
0      0                192.168.1.2:56198          108.160.162.37:http

Anzeige von Sockets mit Status time-wait

$ ss -t4 state time-wait
Recv-Q Send-Q         Local Address:Port             Peer Address:Port
0      0                192.168.1.2:42261           199.59.150.39:https
0      0                  127.0.0.1:43541               127.0.0.1:2633

Der Status kann einer der folgenden sein

1. established
2. syn-sent
3. syn-recv
4. fin-wait-1
5. fin-wait-2
6. time-wait
7. closed
8. close-wait
9. last-ack
10. closing
11. all - All of the above states
12. connected - All the states except for listen and closed
13. synchronized - All the connected states except for syn-sent
14. bucket - Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
15. big - Opposite to bucket state.

Beachten Sie, dass viele Zustände wie syn-sent, syn-recv die meiste Zeit keine Sockets anzeigen würden, da Sockets für eine sehr kurze Zeit in solchen Zuständen bleiben. Es wäre ideal, den Watch-Befehl zu verwenden, um solche Socket-Zustände in Echtzeit zu erkennen.

Hier ist ein Beispiel

$ watch -n 1 "ss -t4 state syn-sent"

Nachdem Sie den obigen Befehl ausgeführt haben, versuchen Sie, eine Website in einem Browser zu öffnen oder etwas von einer URL herunterzuladen. Sie sollten sofort Socket-Verbindungen in der Ausgabe sehen, aber nur für eine sehr kurze Zeit.

Every 1.0s: ss -t4 state syn-sent                   Tue Apr  1 10:07:33 2014
Recv-Q Send-Q           Local Address:Port               Peer Address:Port
0      1                  192.168.1.2:55089            202.79.210.121:https
0      1                  192.168.1.2:33733             203.84.220.80:https
0      1                  192.168.1.2:36240             106.10.198.33:https

10. Verbindungen nach Adresse und Portnummer filtern

Abgesehen von den TCP-Socket-Zuständen unterstützt der Befehl ss auch das Filtern basierend auf Adresse und Portnummer des Sockets. Die folgenden Beispiele demonstrieren dies.

Alle Socket-Verbindungen mit Quell- oder Zielport von ssh anzeigen.

$ ss -at '( dport = :ssh or sport = :ssh )'
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port
LISTEN     0      128                   *:ssh                    *:*
LISTEN     0      128                  :::ssh                   :::*

Sockets mit Zielport 443 oder 80

$ ss -nt '( dst :443 or dst :80 )'
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:58844      199.59.148.82:443
ESTAB      0      0             192.168.1.2:55320     165.193.246.23:443
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80
ESTAB      0      0             192.168.1.2:54889    192.241.177.148:443
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80
ESTAB      0      0             192.168.1.2:33440      38.127.167.38:443

Die folgende Syntax würde auch funktionieren

$ ss -nt dst :443 or dst :80

Weitere Beispiele

# Filter by address
$ ss -nt dst 74.125.236.178
# CIDR notation is also supported
$ ss -nt dst 74.125.236.178/16
# Address and Port combined
$ ss -nt dst 74.125.236.178:80

Ports können auch mit dport/sport-Optionen gefiltert werden. Portnummern muss ein ":" vorangestellt werden.

$ ss -nt dport = :80
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80
ESTAB      0      0             192.168.1.2:55043     74.125.236.178:80

Das obige ist dasselbe wie> ss -nt dst :80

Einige weitere Filterbeispiele

# source address is 127.0.0.1 and source port is greater than 5000
$ ss -nt src 127.0.0.1 sport gt :5000
# local smtp (port 25) sockets
$ sudo ss -ntlp sport eq :smtp
# port numbers greater than 25
$ sudo ss -nt sport gt :1024
# sockets with remote ports less than 100
$ sudo ss -nt dport \< :100
# connections to remote port 80
$ sudo ss -nt state connected dport = :80

Die folgenden Operatoren werden beim Vergleich von Portnummern unterstützt

<= or le : Less than or equal to port
>= or ge : Greater than or equal to port
== or eq : Equal to port
!= or ne : Not equal to port
< or gt : Less than to port
> or lt : Greater than to port

Zusammenfassung

Die obigen Beispiele decken das meiste ab, was der Befehl ss unterstützt. Weitere Informationen finden Sie auf den Manpages.

Die Dokumentation der Filtersyntax befindet sich im Paket iproute2-doc, das auf Debian/Ubuntu-Systemen installiert werden kann

$ sudo apt-get install iproute2-doc

Die Datei /usr/share/doc/iproute2-doc/ss.html enthält Details über die ss-Befehlsfiltersyntax.


Linux
  1. 7 Beispiele für Linux-df-Befehle

  2. rm-Befehlsbeispiele unter Linux

  3. ps-Befehlsbeispiele in Linux

  4. ac-Befehlsbeispiele in Linux

  5. df-Befehlsbeispiele in Linux

16 Beispiele für Echo-Befehle unter Linux

9 Beispiele für tee-Befehle unter Linux

20 ps-Befehlsbeispiele zur Überwachung von Linux-Prozessen

So verwenden Sie den Befehl ss (Netzwerkverbindungen überwachen)

Linux ifconfig-Befehlsbeispiele

id-Befehlsbeispiele in Linux