はじめに
ssコマンドのオプションを調べてたときに閃いてしまったので記事にする。
この覚え方ならオプション忘れないだろう。
ssコマンドとは
ソケットの状態表示をするコマンド。
netstat
というコマンドでも確認できるらしい。
オプション一覧
オプション | 内容 | 私的覚え方 |
---|---|---|
p | ソケットを使ってるプロセスを表示させる | processのp
|
a | 接続待ちを含めたすべてのソケットを表示する | allのa
|
n | 名前解決を行わない | nameのn
|
t | TCPソケットを表示する | tcpのt
|
s | 統計情報を表示する | statisticsのs
|
u | UDPソケットを表示する | udpのu
|
他にも色んなオプションがあるけど、あえて触れない。
気になる人はman ss
や、ss -h
で調べたら良いと思う。
実行結果
練習用に立てたVMでコマンドを実行してみた。
$ ss -pantsu
Total: 244
TCP: 19 (estab 5, closed 6, orphaned 0, timewait 2)
Transport Total IP IPv6
RAW 0 0 0
UDP 0 0 0
TCP 13 11 2
INET 13 11 2
FRAG 0 0 0
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:8000 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:40801 0.0.0.0:* users:(("node",pid=3047,fd=18))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp CLOSE-WAIT 0 0 127.0.0.1:40801 127.0.0.1:51836 users:(("node",pid=3047,fd=21))
tcp CLOSE-WAIT 0 0 127.0.0.1:40801 127.0.0.1:52198 users:(("node",pid=3047,fd=23))
tcp ESTAB 0 220 192.168.0.101:22 192.168.0.10:49897
tcp TIME-WAIT 0 0 127.0.0.1:52246 127.0.0.1:40801
tcp ESTAB 0 0 127.0.0.1:40801 127.0.0.1:52250 users:(("node",pid=3047,fd=25))
tcp ESTAB 0 0 127.0.0.1:40801 127.0.0.1:52252 users:(("node",pid=8349,fd=20))
tcp TIME-WAIT 0 0 127.0.0.1:52248 127.0.0.1:40801
tcp ESTAB 0 0 127.0.0.1:52252 127.0.0.1:40801
tcp ESTAB 0 0 127.0.0.1:52250 127.0.0.1:40801
tcp CLOSE-WAIT 0 0 127.0.0.1:40801 127.0.0.1:51856 users:(("node",pid=3047,fd=24))
tcp LISTEN 0 128 [::]:8000 [::]:*
tcp LISTEN 0 128 [::]:22 [::]:*
統計情報
-s
オプションをつけると表示される統計部分。
これ、どういうときに見るんだろう?
不要ならss -pantu
にして非表示にしてもいいかもしれない。
Total: 244
TCP: 19 (estab 5, closed 6, orphaned 0, timewait 2)
Transport Total IP IPv6
RAW 0 0 0
UDP 0 0 0
TCP 13 11 2
INET 13 11 2
FRAG 0 0 0
ソケット情報
メインで確認したい部分はここだろうと思う。
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:8000 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:40801 0.0.0.0:* users:(("node",pid=3047,fd=18))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp CLOSE-WAIT 0 0 127.0.0.1:40801 127.0.0.1:51836 users:(("node",pid=3047,fd=21))
tcp CLOSE-WAIT 0 0 127.0.0.1:40801 127.0.0.1:52198 users:(("node",pid=3047,fd=23))
tcp ESTAB 0 220 192.168.0.101:22 192.168.0.10:49897
tcp TIME-WAIT 0 0 127.0.0.1:52246 127.0.0.1:40801
tcp ESTAB 0 0 127.0.0.1:40801 127.0.0.1:52250 users:(("node",pid=3047,fd=25))
tcp ESTAB 0 0 127.0.0.1:40801 127.0.0.1:52252 users:(("node",pid=8349,fd=20))
tcp TIME-WAIT 0 0 127.0.0.1:52248 127.0.0.1:40801
tcp ESTAB 0 0 127.0.0.1:52252 127.0.0.1:40801
tcp ESTAB 0 0 127.0.0.1:52250 127.0.0.1:40801
tcp CLOSE-WAIT 0 0 127.0.0.1:40801 127.0.0.1:51856 users:(("node",pid=3047,fd=24))
tcp LISTEN 0 128 [::]:8000 [::]:*
tcp LISTEN 0 128 [::]:22 [::]:*
各情報の内容を以下に示す。
情報 | 内容 |
---|---|
Netid | プロトコル名(tcpやudpなど)を示す |
State | ソケットの状態を示す |
Recv-Q | 受信バッファに残っているデータのバイト数 |
Send-Q | 送信バッファに残っているデータ(Ackが返ってこない)のバイト数 |
Local Address:Port | ローカル側のアドレスとポート番号 |
Peer Address:Port | リモート側のアドレスとポート番号 |
Process | ソケットを使っているプロセス |
State
代表的なステータスを示す。
情報 | 内容 |
---|---|
LISTEN | 接続待ち |
ESTAB | 接続中 |
CLOSE-WAIT | 終了処理中 |
TIME-WAIT | 終了手前の状態なのかな? |
欲しい情報を絞り込む
grepで絞り込む方法は汎用的に使える。
$ ss -pantu | grep :22
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp ESTAB 0 52 192.168.0.101:22 192.168.0.10:49897
tcp LISTEN 0 128 [::]:22 [::]:*
Local AddressのPortで絞り込む方法。
==
の条件の部分は、!=
や>=
などに変更可能。
$ ss -pantu 'sport == :22'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp ESTAB 0 0 192.168.0.101:22 192.168.0.10:49897
tcp LISTEN 0 128 [::]:22 [::]:*
state
オプションを使うことでステータスで絞り込みすることもできる。
※ss state established
で、ESTABのみ表示させる。
$ ss -pantu state established
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp 0 0 127.0.0.1:52272 127.0.0.1:40801
tcp 0 0 127.0.0.1:52270 127.0.0.1:40801
tcp 0 84 192.168.0.101:22 192.168.0.10:50311
tcp 0 0 127.0.0.1:40801 127.0.0.1:52270 users:(("node",pid=3047,fd=27))
tcp 0 0 127.0.0.1:40801 127.0.0.1:52272 users:(("node",pid=9129,fd=20))
最後に一言
午前2時で眠くて全然頭回らない中で書いたのでおかしな点があればご指摘ください。
なんで2022年最終日のこんな時間まで、真面目にpantsu
ネタ書いてんだろう・・・。