マニュアルページには次のようss
に記載されています。
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
フィルタの詳細については、公式ドキュメント(Debianパッケージiproute-doc)を参照してください。
それはどういう意味ですか?以下では何も見つかりません/usr/share/doc/iproute2-doc/
。
$ ls /usr/share/doc/iproute2-doc/ss.html
ls: cannot access '/usr/share/doc/iproute2-doc/ss.html': No such file or directory
$ ls /usr/share/doc/iproute2-doc/
actions changelog.Debian.gz copyright examples README README.decnet README.devel README.distribution.gz README.iproute2+tc README.lnstat
その文書はオンラインでも閲覧できますか?
ありがとうございます。
答え1
利用可能なドキュメントDebian 9 パッケージしかし、以降のバージョンでは削除される予定です。昔ながらだからなこれでマンページが完全に文書化されました。 (ただし、フィルタについての詳細は言葉が多くありません。)
答え2
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
Please take a look at the official documentation for details regarding filters.
STATE-FILTER
STATE-FILTER allows to construct arbitrary set of states to match. Its syntax is sequence of keywords state and exclude fol‐
lowed by identifier of state.
Available identifiers are:
All standard TCP states: established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-
ack, listening and closing.
all - for all the states
connected - all the states except for listening and closed
synchronized - all the connected states except for syn-sent
bucket - states, which are maintained as minisockets, i.e. time-wait and syn-recv
big - opposite to bucket
...
ss -o state established '( dport = :ssh or sport = :ssh )'
Display all established ssh connections.
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24
List all the tcp sockets in state FIN-WAIT-1 for our apache to network 193.233.7/24 and look at their timers.
だから
ss [options] [ FILTER ]
まで拡張可能
ss [options] [ state STATE-FILTER ] [ EXPRESSION ]
オプションはどこにありますか
[-hVHnraloempiKsZNb460tudwxS] [-f FAMILY] [-A QUERY] [-D FILE] [-D FILE]
STATE-FILTERはその一つです
established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listening, closing, all, connected, synchronized, bucket, big
私たちはできるミルダ例に示すように、EXPRESSIONはリストです。IPルールセレクタS.
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ] [ iif STRING ] [ oif STRING ] [ pref NUMBER ] [ l3mdev ] [ uidrange NUMBER-NUMBER ] [ ipproto PROTOCOL ] [ sport [ NUMBER | NUMBER-NUMBER ] ] [ dport [ NUMBER | NUMBER-NUMBER ] ] [ tun_id TUN_ID ]
答え3
私も同じことが気になりましたが、ソースリンクを提供する他の回答やコメントが非常に役立ちました。
完全な構文FILTER
はまだ少し混乱しています。ただし、安全な(ルートが必要)範囲の上のポートを確認する方法と、ソースコードを示すLinodeの例に基づいて、開いているポートを確認する「複雑な」フィルタを設定できました。特定の範囲。
3つの例はすべて機能的に同じです。
ss -a -t '( dport geq :5900 and dport leq :5999 or sport geq :5900 and sport leq :5999 )'
ss -a -t '( dport >= :5900 and dport <= :5999 or sport >= :5900 and sport <= :5999 )'
ss -a -t '( dport >= :5900 & dport <= :5999 | sport >= :5900 & sport <= :5999 )'
この場合、HashicorpのVagrantおよびPackerツール(そしてVirtualbox / VMware / libvirtなどのそれらが対話する仮想化ツール)が自動的にこの範囲のポートを割り当てるので、私が探しているポートはVNCに関連付けられています。生のキーストロークを送信せずに仮想マシンコンソールと対話できるように「ヘッドレス」。
私を混乱させる部分は、ソースコードには行きますが、GEQ
実際のLEQ
フィルタ構文では小文字でなければならない>=
か、記号がまたはを意味しますが、ソースコードでは小文字で定義されていることがわかります<=
。eq
別の秘密で混乱しているのは、それが=
すべて平等に関するものであるということです。eq
==
答え4
これが役に立つかもしれません
SSユーティリティ:クイック紹介
アレクセイ・クズネトフ、[email protected]
一部の負数、2001年9月20日
ss
ソケットを研究するためのもう一つのユーティリティです。機能的には、一部のPerl / awkスクリプトと組み合わせるよりも優れておらず、netstat
確かに高速ですが、より良いものにするだけでは不十分です。 :-) だから今この記事を読むのではなく、時間を無駄にしないでください。もちろん、現在netstatがまだ実行できないいくつかの機能を提案していますが、まもなく確実に実行します。
1. なぜ?
/proc
残念ながら、インターフェイスが不足しています。ソケットの数が十分に多いと、netstat
単にcat /proc/net/tcp/
痛みや呪いを引き起こす可能性があります。 Linux-2.4では、状況はさらに悪化します。ソケット数が少なくても読み取り/proc/net/tcp/
速度が十分に遅くなります。
このユーティリティは、拡張性に優れた新しいアプローチを提供します。ここでは、技術的な詳細を説明するのではなく、コマンドの説明に焦点を当てます。唯一の重要なことは、モジュールをロードするのは悪い考えではなく、ディレクトリにtcp_diag
ある
Modules
ことですiproute2
。そうでなければこれはうまくss
いきますが、後退して少し速く/proc
なるのと同じくらい遅くなります(「一部の図」セクションを参照)。netstat
2.古いニュース
最も単純な形式ではss
netstatと同じですが、いくつかの違いがあります。
ss -t -a
すべてのTCPソケットダンプss -u -a
すべてのUDPソケットをダンプします。ss -w -a
すべてのRAWソケットをダンプします。ss -x -a
すべてのUNIXソケットダンプ
-o
TCPタイマーの状態を表示するオプション。-e
一部の拡張情報を表示するオプションです。待って、待つなど。 netstatのソケット関連オプションはすべてサポートされているようです。しかし、AX.25や他の奇妙なものではありません。 :-) 誰もが望むなら、decnetとipxをサポートできます。 iproute2 libutilsにはすでにこれに対するいくつかの基本的なサポートがあり、これらの新しいアドインを見ることができてうれしいです。
ただし、標準機能は若干異なります。
まず、-a
その状態にはオプションのソケットがなく、
TIME-WAIT
またSYN-RECV
スキップします。私はこれがより合理的なデフォルトであると思います。
第二:UNIXソケットの形式が異なります。 tcp/udp と重複します。標準カーネルはまだ書き込み/読み取りキューに関連付けられているUNIXソケットのピアアドレスの表示を許可しませんが、これを行うパッチがあります。
3番目:デフォルトでは、すべてのタイプではなくTCPソケットのみをダンプします。
次へ:デフォルトでは、数値ホストアドレス(例:)を確認しませんip
!オプションを使用して解析を有効にします-r
。サービス名はデフォルトで解決され、通常はローカルファイルに保存されます。また、サービスデータベースにポートへの参照がない場合、ss
システムは照会されます
rpcbind
。 RPCサービスプレフィックスrpc.
サービスチェックはオプションで抑制できます-n
。
「長い」オプションは許可されていません(気にしません。申し訳ありません)。したがって、アドレスファミリはファミリ識別子として提供され、このオプションは-f
iproute2ルールに従います。ほとんどは、オプションリゾルバがアドレスを正しく確認できるようにするためのものですが、副作用として実際には指定されたシリーズをサポートするソケットにのみダンプを制限します。-A
オプションの後にダンプするソケットテーブルのリストもサポートされています。論理的には、ソケットテーブルのIDは_address_シリーズのIDとは異なり、これは別の非互換ポイントです。したがって、 idはall
、、、、、、tcp
のいずれかです。願いより?まあ、頭字語でしか見ればパケットソケットを見ることができると推測することは難しくありません。実際、いくつかの異なる略語があります。 feはデータグラムUNIXソケットのみを選択します。udp
raw
inet
unix
packet
netlink
inet
tcp|udp|raw
packet
unix_dgram
次: まあ、まだわからない。 :-)
3. これで新機能について話す時間です。
ソケットリストの組み込みフィルタリングです。
3.1週ごとにフィルタリングします。
ss
state
キーワードと後にいくつかのステータス識別子を使用してソケットのステータスexclude
をフィルタリングできます。
ステータス識別子は、標準のTCPステータス名(リストにない、すでにわからない場合は役に立たない)、または略語です。
all
- すべての州についてbucket
- TCPミニソケットの場合(TIME-WAIT|SYN-RECV
)big
- ミニソケットを除くすべてconnected
- 閉じずに聞くことはありません。synchronized
- 接続されているものと接続されていないものSYN-SENT
Feは、以下を除くすべてのTCPソケットをダンプしますSYN-RECV
。
ss exclude SYN-RECV
state
あるいは、ディレクティブがすべてない場合、ステータスexclude
フィルタはデフォルトでListen、syn-recv、time-wait、および閉じたソケットを除いてall
withオプションまたは-a
に設定されます。all
3.2アドレスとポートでフィルタリングします。
オプションリストには、アドレス/ポートフィルタを含めることができます。ブール演算or
、、述and
部not
で構成されるブール式です。実際にブール演算のすべての名前は&
、、、、、&&
で使用されます。 ただし、Unixシェルがこれらのシンボルに与える特別な意味を忘れず、コマンドラインで使用するときは正しくエスケープしてください。|
||
!
述語は次のタイプのいずれかです。
- A. 住所/ポートの一致。アドレスをマスクと比較して確認し、ポートはワイルドカードまたは正しいポートです。次のいずれかです。
dst prefix:port src prefix:port src unix:STRING src link:protocol:ifindex src nl:channel:pid
*
プレフィックスとポートはすべて存在しないか、ワイルドカードを表すことで置き換えることができます。 UNIXソケットは、シェルワイルドカードを使用してソケット名を一致させるためのより強力なスキームを使用します。あるいは、プレフィックス unix: と link: は、アドレス系列がコンテキストで明白である場合に省略することができます (オプション-x
または with-f unix
または with キーワードを使用)。unix
鉄
dst 10.0.0.1 dst 10.0.0.1: dst 10.0.0.1/32: dst 10.0.0.1:*
これは同じで、ソケットがホスト10.0.0.1のすべてのポートに接続されていることを意味します。
dst 10.0.0.0/24:22
ネットワーク10.0.0.0 ... 255のポート22のソケットに接続します。
ポートとアドレスはコロンで区切られているため、IPv6アドレスに問題が発生する可能性があります。一般に、最後のコロンをポートを分割するものと解釈します。 IPv6 アドレスの提供を許可するには、IPv6 HTTP URL で使用されるものと同様のトリックを使用できます。
dst [::1]
ソケットがすべてのポートの::1に接続されているかどうか
もう一つの方法は
dst ::1
128/です。 /は、コロンがIPv6アドレスの一部であることを理解するのに役立ちます。今:に
dst 10.0.0.1
別のエイリアスを追加することができますdst [10.0.0.1]
。 :-)アドレスはDNS名です。この場合、すべてのアドレスが見つかります(オプションまたは特別な
-f
アドレスプレフィックスに限定されない場合はすべてのアドレスファミリでinet:
)inet6
、結果式にはor
すべてのアドレスが含まれます。 - B.ポート表現:
dport >= :1024 dport != :22 sport < :32000
など。
すべて の関係:
<
、、、、、、、、、、、、、...希望のバリエーションを使用してください。ただし、コマンドラインに特殊文字を入力するときに特殊文字をエスケープすることを忘れないでください。 :-)>
=
>=
=
==
!=
eq
ge
lt
ne
ポート番号は構文的にケース A と一致します。 IP アドレスを追加することもできますが、AFe タイプの対応する述語と同じおよび を
==
除いて比較に参加しません。!=
dst 10.0.0.1:22
同等dport eq 10.0.0.1:22
でnot dst 10.0.0.1:22
同等dport neq 10.0.0.1:22
- だ。キーワード
autobound
。ローカルシステムの自動的にバインドされたソケットと一致します。
4. 例
FIN-WAIT-1
1. Apacheからネットワーク193.233.7/24まで、すべてのアクティブTCPソケットを一覧表示し、そのタイマーを確認します。ss -o state fin-wait-1 \( sport = :http or sport = :https \) \ dst 193.233.7/24
このような、同等の論理演算が不足していることに言及するのを忘れました
and
。- 2. わかりました、もう残りを見てください...
ss -o excl fin-wait-1 ss state fin-wait-1 \( sport neq :http and sport neq :https \) \ or not dst 193.233.7/24
私たちがしなければならないことに注意してください。二つSSはこれを要求した。ステータスマッチは常にアドレス/ポートマッチに関連付けられます。その理由は純粋に技術的です。 ss は、アドレスを確認する前に一致しない状態をすばやくスキップし、タイムスタンバイと syn-recv ソケットをすばやくスキップする機能が論理一般性よりも重要だと思います。
- 3. 次に、自動バインドされたポートを使用するすべてのソケットを見てみましょう。
ss -a -A all autobound
- 4. 最後に、ローカルXサーバーに接続されているすべてのローカルプロセスを見つけます。
ss -xp dst "/tmp/.X11-unix/*"
申し訳ありません。現時点ではカーネルでは動作しないため、パッチが必要です。しかし、私たちはまだサーバー側を見ることができます:
ss -x src "/tmp/.X11-unix/*"
5. 土地に戻る: 真の手動
5.1 コマンドパラメータ
パラメータの一般的な形式ss
は次のとおりです。
ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]
OPTIONS
OPTIONS
一般的なUNIXルールを使用する単一文字オプションのリスト。
-h
- ヘルプページを表示-?
——もちろん同じです-v
,-V
- バージョンを印刷ss
して終了します。-s
- 要約統計を印刷します。このオプションは、さまざまなソースからダイジェストを取得するソケットのリストを解析しません。これはソケットの数が多すぎて解析が困難な場合に/proc/net/tcp
便利です。-D FILE
- 何も表示せず、FILE
フィルタを適用した後にTCPソケットに関する生の情報のみをダンプします。FILE
使用されている場合-
stdout
。-F FILE
- 読み取りフィルタから続行されますFILE
。の各行はFILE
単一のコマンドラインオプションとして解釈されます。FILE
使用されている場合-
stdin
。-r
- 数値アドレス/ポートの解析を試みます。-n
- ポートを解決しようとしないでください。-o
- 一部のオプション情報の表示(fe TCPタイマー)-i
- 一部のTCP関連情報の表示(RTO、輻輳ウィンドウ、遅い開始しきい値など)-e
- 追加オプション情報の表示-m
- ソケットが使用するメモリに関する拡張情報を表示します。有効になっている場合にのみ使用できますtcp_diag
。-p
- ソケットを所有するプロセスのリストを表示-f FAMILY
- アドレスを確認するために使用されるデフォルトのアドレス系列。また、このオプションは、指定されたアドレスファミリをサポートするソケットのリストを制限します。現在、次の シリーズをサポートしています:unix
、、、、。inet
inet6
link
netlink
-4
- エイリアス-f inet
-6
- エイリアス-f inet6
-0
- エイリアス-f link
-A LIST-OF-TABLES
- ダンプするソケットテーブルのコンマ区切りリスト。次 の識別子 が理解され ます。all
、、、、、、、、、、、、、、、、。inet
tcp
udp
raw
unix
packet
netlink
unix_dgram
unix_stream
packet_raw
packet_dgram
-x
- エイリアス-A unix
-t
- エイリアス-A tcp
-u
- エイリアス-A udp
-w
- エイリアス-A raw
-a
- ソケットのすべての状態を表示します。デフォルトでは、状態のソケットLISTEN
はスキップされます。TIME-WAIT
SYN_RECV
CLOSE
-l
- 状態にある店舗のみ表示LISTEN
STATE-FILTER
STATE-FILTER
一致するすべての状態セットを構成できます。構文は、一連のキーワードstate
とexclude
状態識別子で構成されています。使用可能な識別子は次のとおりです。
- すべての標準TCP ステータス:
established
、、、、、、、、、、、および。 syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all
- すべての州についてconnected
listen
- とを除くすべての州closed
synchronized
connected
- 除くすべての州syn-sent
bucket
- ミニソケットに保持されている状態、すなわちtime-wait
とsyn-recv
。big
- と反対bucket
ADDRESS_FILTER
ADDRESS_FILTER
は、Cスタイルのfeで短縮することができるand
、or
および演算を使用するブール式です。not
&
&&
述語はローカルおよびリモートソケットアドレスを確認します。述語にはいくつかのタイプがあります。
dst ADDRESS_PATTERN
- リモートアドレスとポートの一致src ADDRESS_PATTERN
- ローカルアドレスとポートの一致dport RELOP PORT
- リモートポートを番号と比較sport RELOP PORT
- ローカルポートを番号と比較autobound
- ソケットが一時ポートにバインドされていることを確認してください。
RELOP
<=
>=
などの一部です。==
Unix シェルで簡単に使用できるように、FORTRAN 文字le
などの記号も許可されます。gt
形式と意味は、ADDRESS_PATTERN
アドレス系列によって異なります。
inet
-IPプレフィックスで構成され、ADDRESS_PATTERN
その後にオプションのコロンとポートが続きます。プレフィックスまたはポート部分が欠落しているか置き換えられている場合は、*
ワイルドカードの一致が表示されます。inet6
- と同じで、inet
プレフィックスだけがIPv6アドレスを表します。コロンとは異なり、inet
コロンはあいまいなので、アドレスがss
サポートされているURLで使用されるものと同じスキームを使用できます。[
]
unix
-ADDRESS_PATTERN
シェルスタイルのワイルドカード文字。packet
- 形式は次のとおりですinet
。ポートではなくインターフェイスインデックスのみが保持され、アドレスではなくリンクレイヤプロトコルIDのみが保持されます。netlink
- 形式は次のとおりですinet
。ポートの代わりにソケットpidだけが保持され、アドレスの代わりにnetlinkチャネルが維持されます。
PORT
ADDRESS_PATTERN
ワイルドカードアドレス部分と構文は同じです。もちろん、UNIXソケットでは定義されていません。
5.2環境変数
ss
さまざまな環境変数を使用して情報ソースを変更できます。
PROC_SLABINFO
書く/proc/slabinfo
PROC_NET_TCP
書く/proc/net/tcp
PROC_NET_UDP
書く/proc/net/udp
- など。
変数を使用すると、PROC_ROOT
すべての階層ルートを変更できます/proc/
。
変数は、TCPDIAG_FILE
TCPソケットに関する情報のカーネルダンプを要求する代わりにファイルを開くように指定します。
/proc/
このオプションは通常。
5.3 出力形式
6つの列。 1つ目は、Netid
不明な場合のソケットタイプとトランスポートプロトコルです。tcp
、、、udp
はraw
UNIXデータグラムソケット、netlink、および生およびデータグラムパケットソケットのu_str
略語です。この列はオプションで、フィルタが一意のネットワークIDを選択した場合は非表示になります。unix_stream
u_dgr
nl
p_raw
p_dgr
2番目の列はですState
。ソケットの状態がここに表示されます。これらの名前はUNCONN
TCPでは不可能ですが、他の種類の接続されていないソケットでは一般的であることを除いて、標準のTCP名です。同様に、この列も非表示にできます。
その後、2つの列(およびRecv-Q
)Send-Q
には、受信および送信を待っているデータの量が表示されます。
最後の2つの列には、ソケットのローカルアドレスとポート、および対応するピアアドレス(ソケットが接続されている場合)が表示されます。
-o
optionsまたはが与えられると、-e
オプション-p
は固定位置に表示されず、スペースのペアで区切られます
option:value
。値が単一の数値でない場合は、(
...で囲まれ、)
カンマで区切られた値のリストとして表示されます。鉄
timer:(keepalive,111min,0)
TCPタイマーの一般的な形式です(オプション-o
)。
users:((X,113,3))
一般的なユーザーのリスト(オプション-p
)です。
6. いくつかの数字
さて、パフォーマンスを測定するpidentd
ツールを試してみましょう。ibench
これは毎秒30の要求です。テストすることもなく、遅すぎます。さて、Patchesディレクトリにあるパッチを使ってpidentdをパッチしましょう。その後、毎秒約4300の要求を処理し、多数のタイムスタンバイバケットでソケットテーブルを汚染する便利なツールになりました。
したがって、各テストは30000個のソケットを含む汚染されたテーブルから始まり、テーブルの完全なダンプをwcにパイプして時間の変化を測定します。
結果:
netstat -at
- 15.6秒ss -atr
しかし、いいえtcp_diag
- 5.4秒ss -atr
対tcp_diag
- 0.47秒
コメントはありません。コメントが必要ですが、ほとんどの時間がtcp_diag
カーネル内で無駄になり、ネットワークが完全にブロックされます。 10秒以上ならそうです。tcp_diag
同じ操作がシステム時間の100ミリ秒以内に実行されます。