ss
コマンドは、クラシックなnetstat
の現代版といえるでしょう。 Linux では、ネットワーク接続に関する統計情報を得るために使用することができます。
The ss Command versus netstat
非推奨の netstat
コマンドの代わりに、ss
はコンピュータが他のコンピュータ、ネットワーク、サービスとどう通信しているかについて詳しい情報を与えてくれます。 生ソケットはネットワーク OSI レベルで動作するため、TCP および UDP ヘッダーはトランスポート層ではなく、アプリケーションソフトウェアによって処理される必要があります。
Using ss
最新の Linux ディストリビューションにはすでに含まれているので、 ss
をインストールする必要はないだろう。 しかし、その出力は非常に長く、630行を超えるものもある。 このため、スクリーンショットに収まらないので、私たちは得られた結果のテキスト表現を含んでいます。
ネットワーク接続の一覧表示
コマンドライン オプションなしで ss
を使用すると、リスニングされていないソケットが一覧表示されます。 つまり、リスニング状態でないソケットをリストアップします。
これを見るには、次のように入力します:
ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Processu_str ESTAB 0 0 * 41826 * 41827u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688u_str ESTAB 0 0 * 35550 * 35551...u_str ESTAB 0 0 * 38127 * 38128u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242u_str ESTAB 0 0 * 19039 * 19040u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306icmp6 UNCONN 0 0 *:ipv6-icmp *:*udp ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps
列は次のとおりです:
- Netid: ソケットの種類。 この例では、Unixのストリームである「u_str」、IPバージョン6のICMPソケットである「udp」、「icmp6」となっています。 Linux のソケットの種類については、Linux の man ページに詳細な説明があります。 ソケットの状態.
- Recv-Q: 受信パケット数.
- Send-Q.受信パケット数.
- Send-Q.受信パケット数:
- Local Address:Port: ローカルアドレスとポート (またはUnixソケットの場合は同等値).
- Peer Address:Port: リモートアドレスとポート (またはUnixソケットの場合は同等値).
UDPソケットでは “State” 列は通常空白です。 TCPソケットの場合は、以下のいずれかになります。
- LISTEN: サーバー側のみ。
- SYN-SENT:ソケットは接続要求を待っています。 クライアントサイドのみ。 このソケットは接続要求を行い、それが受け入れられるかどうかを待っている。 サーバ側のみ。
- ESTABLISHED: サーバ側とクライアント側。
- FIN-WAIT-1: サーバとクライアントの間でデータ転送ができるように、サーバとクライアントの間で作業接続が確立されました。 このソケットは、リモートソケットからの接続終了要求、またはこのソケットから送信された接続終了要求の肯定応答を待っています。
- FIN-WAIT-2: サーバーとクライアント。 このソケットはリモートソケットからの接続終了要求を待っている。
- CLOSE-WAIT: サーバーとクライアント。 このソケットはローカルユーザからの接続終了要求を待っています。
- CLOSING: サーバおよびクライアント。 このソケットはリモートソケットからの接続終了要求の肯定応答を待っています。
- LAST-ACK: サーバーとクライアント。
- TIME-WAIT: サーバとクライアント: このソケットはリモートソケットに送信したコネクション終了要求の肯定応答を待っている。 このソケットはリモートソケットに確認応答を送信し、リモートソケットの終了要求を受信したことを知らせました。 現在、その確認応答が受信されたことを確認するために待機しています。
- CLOSED
Listing Sockets
リスニング中のソケットを見るには、以下のように-l
(リスニング)オプションを追加します:
ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ...u_str LISTEN 0 4096 /run/systemd/private 13349 * 0 u_seq LISTEN 0 4096 /run/udev/control 13376 * 0 u_str LISTEN 0 4096 /tmp/.X11-unix/X0 33071 * 0 u_dgr UNCONN 0 0 /run/systemd/journal/syslog 13360 * 0 u_str LISTEN 0 4096 /run/systemd/fsck.progress 13362 * 0 u_dgr UNCONN 0 0 /run/user/1000/systemd/notify 32303 * 0
これらのソケットはすべて未接続で、リスニング中である。 rtnl」はルーティングネットリンクを意味し、カーネルとユーザー空間プロセス間の情報転送に使用されます。
すべてのソケットをリストする
すべてのソケットをリストするには、-a
(すべて)オプションを使用できます:
ss -a
<2210>
状態にかかわらず、出力にはすべてのソケットを含みます。
Listing TCP Sockets
また、一致するソケットのみが表示されるようにフィルターを適用することもできます。 ここでは、-t
(TCP) オプションを使用するため、TCP ソケットのみがリストされます:
ss -a -t
Listing UDP Sockets
-u
(UDP) オプションも同じタイプのフィルター作用を実行します。 今回は、UDP ソケットのみを表示します:
ss -a -u
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process UNCONN 0 0 0.0.0.0:631 0.0.0.0:* UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* UNCONN 0 0 0.0.0.0:60734 0.0.0.0:* UNCONN 0 0 127.0.0.53%lo:domain 0.0.0.0:* ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps UNCONN 0 0 :mdns :* UNCONN 0 0 :51193 :*
Listing Unix Sockets
Unix ソケットのみを表示するには、次に示すように -x
(Unix) オプションを含めます。
ss -a -x
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 * 23183 * 23184 u_str ESTAB 28 0 @/tmp/.X11-unix/X0 52640 * 52639 ...u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306
Listing Raw Sockets
生ソケット用のフィルタは、-w
(raw) オプションを指定することです。
ss -a -w
Listing IP Version 4 Sockets
TCP/IPバージョン4プロトコルを使用するソケットは、-4
(IPV4) オプションでリストすることが可能です。
ss -a -4
Listing IP Version 6 Sockets
以下のように、-6
(IPV6) オプションで一致するIPバージョン6フィルタをオンにすることが可能です。
ss -a -6
Listing Sockets By State
state
オプションで、ソケットをその状態別にリストアップすることができる。 これは、確立、リスニング、または閉じた状態で動作する。
次のコマンドは確立された TCP 接続を探し、ss
は名前の解決を試みます:
ss -t -r state established
確立状態の接続が 4 件リストアップされます。 ホスト名であるubuntu20-04が解決され、2行目のSSH接続の22の代わりに「ssh」が表示されています。
ss -t -r state listening
Recv-Q Send-Q Local Address:Port Peer Address:Port Process 0 128 localhost:5939 0.0.0.0:* 0 4096 localhost%lo:domain 0.0.0.0:* 0 128 0.0.0.0:ssh 0.0.0.0:* 0 5 localhost:ipp 0.0.0.0:* 0 100 localhost:smtp 0.0.0.0:* 0 128 :ssh :* 0 5 ip6-localhost:ipp :* 0 100 ip6-localhost:smtp :*
Listing Sockets By Protocol
dport
と sport
オプション (それぞれ宛先ポートとソースポートを表す) で、特定のプロトコルを使用しているソケットを一覧することができます。
established
接続で HTTPS プロトコルを使用しているソケットを一覧表示するには、次のように入力します (開始括弧の後と終了括弧の前にスペースがあることに注意):
ss -a state established '( dport = :https or sport = :https )'
プロトコル名またはそのプロトコルに通常関連しているポートを使用することができます。
ss -a '( dport = :ssh or sport = :ssh )'
ss -a '( dport = :22 or sport = :22 )'
予想通り、同じ結果が得られました。
特定の IP アドレスへの接続を一覧表示
dst
オプション (destination) で、特定の接続先 IP アドレスを表示することができます。
ss -a dst 192.168.4.25
プロセスの識別
どのプロセスがソケットを使用しているかを確認するには、以下のように processes オプション (-p
) を使用します (sudo
を使用する必要があることに注意してください)。
sudo ss -t -p
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ESTAB 0 0 192.168.4.28:57650 54.218.19.119:https users:(("firefox",pid=3378,fd=151)) ESTAB 0 0 192.168.4.28:ssh 192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))
これは、TCP ソケット上の 2 つの確立された接続が、SSH デーモンと Firefox によって使用されていることを示しています。
A Worthy Successor
ss
コマンドは、以前 netstat
によって提供されたものと同じ情報を、よりシンプルでアクセスしやすい方法で提供します。 より多くのオプションやヒントについては man ページをチェックすることができる。