ss - ソケットの使用状況を調べる

スポンサーリンク

ssコマンドはソケットの使用状況を調べることができます。net-toolsパッケージのnetstatコマンドと似たような情報を得ることができます。
net-toolsパッケージは非推奨となったため、現在はnet-toolsから移行する形でiprouteパッケージ(iproute2パッケージ)のssコマンドを利用してソケットの使用状況を調べます。
ssの名前はsockstat、つまりsocket statisticsの略になります。

ssコマンドの構文

ssコマンドの構文

フィルタの構文

ssコマンドでのFILTERを用いた例

ssコマンドでフィルタを用いる場合、解釈する文字列によってはシェルで解釈される場合があるので、必要に応じて引用符で囲む必要があります。
しかし、'state <STATE-FILTER>'の部分はstateという文字列でコマンドラインオプションのような解釈の処理を行うため、'state'と'<STATE-FILTER>'のトークンをまとめて、引用符で囲んではいけません。

 

 

 

STATE-FILTER

state <STATE-FILTER>のように記述します。

all : 全ての状態
connected : listeningとclosedを除いた全ての状態
synchronized : syn-sentを除いた全てのconnectedの状態
bucket : minisocketとして維持されている状態(例:time-wait, syn-rec)
big : bucketを除いた全ての状態

 

 

 

EXPRESSION

複数のEXPRESSIONは暗黙的に"and"で結合されます。
Subexpressionとして括弧"()"を用いることができます。例:dst 127.0.0.1 ( dport = :3000 dev = lo )
EXPRESSIONで用いるものは以下のものになります。

  • {dst | src} [=] HOST
    宛先または送信元のホストがマッチするかどうか
  • {dport | sport} [OP] [FAMILY:]:PORT
    宛先ポートまたは送信元ポートと比較して条件に合うかどうか
    OPは比較演算子で"=", "<", "<=", "=", "!=", ">=", ">"
  • dev [=|!=] DEVICE
    使用しているデバイスにマッチするかどうか
  • fwmark [=|!=] MASK
    fwmark値がマッチするかどうか
  • cgroup [=|!=] PATH
    cgroupとパスがマッチするかどうか
  • autobound
    送信元アドレスのポートまたはパスが自動で割り当てられたものかどうか

演算子を省略すると"="になります。また、ほとんどの演算子はエイリアス(別名)もあります。

 

 

 

ホスト名の構文

ホスト名の構文

FAMILYはssコマンドの-fオプションで指定できます。ただし、一つしか指定できません。
FAMILYによって、ADDRESSとPORTを指定する形式は変わります。
良く知られているPORT名は例えば、:sshのようにサービス名で指定できます。そのリストは/etc/servicesで確認できます。

 

 

 

listen状態ではないソケットを表示(オプションなし)

ssコマンドはオプションなしの場合、listen状態ではないソケットを表示します。

コマンド例と実行結果

 

 

 

ヘッダーを表示しない(-Hオプション)

-Hオプションはヘッダーを表示しません。sortコマンド等と一緒に利用するときに用いるときに便利です。

コマンド例と実行結果

 

この記事ではソケットの状態の種類をざっと確認するために以下のコマンドを利用したいと思います。
例えば、以下でssコマンドのオプションなしの場合にlisten状態のソケットがないことを確認できます。

UNCONNはunconnectedの略になり、TCPだとCLOSEDの状態を表します。

 

 

 

全てのソケットを表示(-aオプション)

-aオプションは全てのソケットを表示することができます。

コマンド例と実行結果

 

 

 

 

listen状態のソケットを表示(-lオプション)

-lオプションはオプションなしのときに表示されなかったlisten状態のソケットを表示できます。

コマンド例と実行結果

 

 

 

サービス名等を数字で表示(-nオプション)

-nオプションはサービス名を数字で表示することができます。

コマンド例と実行結果

 

 

 

アドレスを名前解決して表示(-rオプション)

-rオプションはアドレスを名前解決して表示できます。

コマンド例と実行結果

 

 

 

統計情報を表示(-sオプション)

-sオプションは統計情報を表示できます。

コマンド例と実行結果

 

 

 

イベントが起きたときのソケットを監視(-Eオプション)

イベントが起きたときのソケットを監視できます。
破棄されたソケットを表示していきます。
Ctrl+cで終了します。

コマンド例と実行結果

 

 

 

FAMILYを指定(-fオプション等)

FAMILYを一つ指定できます。指定できるFAMILYはunix, inet, inet6, link, netlink, vsock, xdpになります。

コマンド例と実行結果

-fオプションはエイリアスとしてそれぞれのFAMILYを指定できる別オプションがあります。これらのオプションを複数使用してもそのうちの一つしか機能しません。

 

 

 

ソケットタイプを絞り込む(-Aオプション等)

-Aオプションはソケットタイプをコンマでリストして、ソケットタイプを絞り込むことができます。
指定できるタイプは
all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream, unix_seqpacket, packet_raw, packet_dgram, dccp, sctp, vsock_stream, vsock_dgram, xdpがあります。
また、ソケットタイプの前に"!"をつけることでそのタイプを絞り込みから除外できます。
例えば、

は全てのソケットからTCPソケットを除外して表示できます。

コマンド例と実行結果

ソケットタイプの一部は簡単なオプションで絞り込むことができ、複数の使用も可能です。

 

 

 

ファイルからフィルタを読み込む(-Fオプション)

-Fオプションはファイルからフィルタを読み込むことができます。

dns_ssh_filter

コマンド例と実行結果

補足として、利用しているポートのサービス名とポート番号の対応は以下の通りです。

 

dns_ssh_filterのフィルタの記述方法は別の方法でも記述できます。
例えば、論理演算の分配則のようにsrc *をまとめて

のように記述できます。また、ssコマンドはandを省略できるため、

のように記述できます。

 

 

 

ソケットを利用しているプロセスを表示(-pオプション)

-pオプションを用いるとソケットを利用しているプロセスが表示されるようになります。

コマンド例と実行結果

 

 

 

タイマー情報を表示(-oオプション)

-oオプションを用いるとタイマー情報が表示されるようになります。

コマンド例と実行結果

 

 

 

ソケットのメモリー使用情報を表示(-mオプション)

-mオプションを用いるとソケットのメモリー使用情報が表示されるようになります。

コマンド例と実行結果

 

 

 

詳細なソケット情報を表示(-eオプション)

-eオプションを用いると詳細なソケット情報が表示されるようになります。

 コマンド例と実行結果

 

 

 

ソケットのTCP内部情報を表示(-iオプション)

-iオプションを用いるとソケットのTCPの内部情報が表示されるようになります。

コマンド例と実行結果

 

 

 

ToS情報を表示(--tosオプション)

--tosオプションを用いるとToS(Type of Service)情報が表示されるようになります。

コマンド例と実行結果

 

 

 

cgroup情報を表示(--cgroupオプション)

--cgroupオプションを用いるとcgroup情報が表示されるようになります。

コマンド例と実行結果

 

 

 

inetソケットオプションを表示(--inet-sockoptオプション)

--inet-sockoptオプションを用いるとinetソケットオプション情報が表示されるようになります。

コマンド例と実行結果

 

 

 

参考

RFC 793: Transmission Control Protocol

RFC 9293: Transmission Control Protocol (TCP)