GNU/Linux >> Linux の 問題 >  >> Linux

ネットワーク接続を監視するためのLinuxssコマンドの10の例

ss-ソケット統計

前のチュートリアルでは、netstatコマンドを使用してネットワーク/ソケット接続の詳細を取得する方法を説明しました。ただし、netstatコマンドは長い間非推奨になり、iprouteツールスイートのssコマンドに置き換えられました。

ssコマンドは、netstatコマンドよりも多くの情報を使用して、ネットワーク接続に関する詳細を表示でき、高速です。 netstatコマンドは、さまざまな/procファイルを読み取って情報を収集します。ただし、表示する接続が多い場合、このアプローチは遅くなります。

ssコマンドは、カーネル空間から直接情報を取得します。 ssコマンドで使用されるオプションは、netstatと非常によく似ているため、簡単に置き換えることができます。

したがって、このチュートリアルでは、ssコマンドを使用してネットワーク接続とソケット統計を確認する方法の例をいくつか紹介します。

1。すべての接続を一覧表示する

最も簡単なコマンドは、すべての接続を一覧表示することです。

$ 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
.....

出力をスクロール可能にするために、出力をlessにパイプします。出力には、すべてのtcp、udp、およびunixソケット接続の詳細が含まれます。

2。 tcp、udp、またはunix接続を除外します

tcp、udp、またはunix接続のみを表示するには、t、u、または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

デフォルトでは、「t」オプションだけで「確立された」または「接続された」接続のみが報告されます。「リッスン」しているtcpソケットは報告されません。「-a」オプションをtと一緒に使用して、報告します。それらすべてを一度に。

すべてのUDP接続を一覧表示する

$ 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).

同様に、xオプションを使用して、すべてのUNIXソケット接続を一覧表示します。

3。ホスト名を解決しない

出力を高速化するには、「n」オプションを使用して、ssがIPアドレスをホスト名に解決しないようにします。ただし、これによりポート番号の解決も妨げられます。

$ 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。リスニングソケットのみを表示する

これにより、すべてのリスニングソケットが一覧表示されます。たとえば、Apache Webサーバーはポート80でソケット接続を開き、着信接続をリッスンします。

$ 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                     :::*

上記のコマンドは、すべての「リスニング」「tcp」接続を一覧表示します。 nオプションは、IPアドレスのホスト名解決を無効にして、出力を高速化します。

すべてのリスニングUDP接続を一覧表示するには、tを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。プロセス名とpidを印刷する

接続を所有するプロセス名/pidを出力するには、pオプションを使用します

$ 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))

上記の出力では、最後の列にプロセス名とpidが含まれています。この例では、dnsmasqはプロセス名であり、1299は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。要約統計量を印刷する

sオプションは、統計を出力します。

$ 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。タイマー情報を表示する

'-o'オプションを使用すると、各接続の時間情報が表示されます。タイマー情報は、

の長さを示します
$ 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。 IPv4またはIPv6ソケット接続のみを表示する

IPv4ソケット接続のみを表示するには、「-finet」または「-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                   *:*

IPv6接続のみを表示するには、「-finet6」または「-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。 TCP状態による接続のフィルタリング

ssコマンドは、特定の接続のみを表示するために使用できるフィルターをサポートしています。フィルタ式には、すべてのオプションの後に接尾辞を付ける必要があります。 ssコマンドは、次の形式のフィルターを受け入れます。

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

次に、ソケット接続をソケット状態でフィルタリングする方法の例をいくつか示します。
「接続済み」状態にあるすべてのIpv4tcpソケットを表示します。

$ 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

状態時間待機

でソケットを表示します
$ 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

状態は次のいずれかになります

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.

syn-sent、syn-recvなどの多くの状態では、ソケットが非常に短時間そのような状態のままになるため、ほとんどの場合、ソケットが表示されないことに注意してください。このようなソケットの状態をリアルタイムで検出するには、watchコマンドを使用するのが理想的です。

これが例です

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

上記のコマンドを実行した後、ブラウザでWebサイトを開くか、URLから何かをダウンロードしてみてください。すぐに、出力にソケット接続が表示されるはずですが、非常に短時間です。

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。アドレスとポート番号で接続をフィルタリングする

tcpソケットの状態とは別に、ssコマンドはソケットのアドレスとポート番号に基づくフィルタリングもサポートします。次の例はそれを示しています。

sshの送信元ポートまたは宛先ポートとのすべてのソケット接続を表示します。

$ 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                   :::*

宛先ポート443または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

次の構文も機能します

$ ss -nt dst :443 or dst :80

その他の例

# 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

ポートは、dport/sportオプションでフィルタリングすることもできます。ポート番号の前には「:」を付ける必要があります。

$ 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

上記は>ss-nt dst:80

と同じです

フィルタリングのその他の例

# 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

ポート番号を比較する場合、次の演算子がサポートされています

<= 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

概要

上記の例は、ssコマンドがサポートするもののほとんどをカバーしています。詳細については、manページを確認してください。

フィルタ構文のドキュメントは、debian/ubuntuシステムにインストールできるパッケージiproute2-docにあります

$ sudo apt-get install iproute2-doc

ファイル/usr/share/doc/iproute2-doc/ss.htmlには、ssコマンドフィルター構文の詳細が含まれています。


Linux
  1. Linux での rm コマンドの例

  2. Linux での ps コマンドの例

  3. Linux での sa コマンドの例

  1. w Linux でのコマンド例

  2. Linux での ac コマンドの例

  3. Linux での df コマンドの例

  1. 7 Linux df コマンドの例

  2. Linux での du コマンドの例

  3. Linux での dsniff コマンドの例