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コマンドフィルター構文の詳細が含まれています。