SSユーティリティ:クイック紹介

SSユーティリティ:クイック紹介

マニュアルページには次のよう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

これが役に立つかもしれません

https://www.apt-browse.org/browse/ubuntu/trusty/main/all/iproute2-doc/3.12.0-2/file/usr/share/doc/iproute2-doc/ss.html


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.古いニュース

最も単純な形式ではssnetstatと同じですが、いくつかの違いがあります。

  • ss -t -aすべてのTCPソケットダンプ
  • ss -u -aすべてのUDPソケットをダンプします。
  • ss -w -aすべてのRAWソケットをダンプします。
  • ss -x -aすべてのUNIXソケットダンプ

-oTCPタイマーの状態を表示するオプション。-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

「長い」オプションは許可されていません(気にしません。申し訳ありません)。したがって、アドレスファミリはファミリ識別子として提供され、このオプションは-fiproute2ルールに従います。ほとんどは、オプションリゾルバがアドレスを正しく確認できるようにするためのものですが、副作用として実際には指定されたシリーズをサポートするソケットにのみダンプを制限します。-Aオプションの後にダンプするソケットテーブルのリストもサポートされています。論理的には、ソケットテーブルのIDは_address_シリーズのIDとは異なり、これは別の非互換ポイントです。したがって、 idはall、、、、、、tcpのいずれかです。願いより?まあ、頭字語でしか見ればパケットソケットを見ることができると推測することは難しくありません。実際、いくつかの異なる略語があります。 feはデータグラムUNIXソケットのみを選択します。udprawinetunixpacketnetlinkinettcp|udp|rawpacketunix_dgram

次: まあ、まだわからない。 :-)

3. これで新機能について話す時間です。

ソケットリストの組み込みフィルタリングです。

3.1週ごとにフィルタリングします。

ssstateキーワードと後にいくつかのステータス識別子を使用してソケットのステータス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、および閉じたソケットを除いてallwithオプションまたは-a に設定されます。all

3.2アドレスとポートでフィルタリングします。

オプションリストには、アドレス/ポートフィルタを含めることができます。ブール演算or、、述andnotで構成されるブール式です。実際にブール演算のすべての名前は&、、、、、&&で使用されます。 ただし、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 ::1128/です。 /は、コロンがIPv6アドレスの一部であることを理解するのに役立ちます。

    今:にdst 10.0.0.1別のエイリアスを追加することができますdst [10.0.0.1]。 :-)

    アドレスはDNS名です。この場合、すべてのアドレスが見つかります(オプションまたは特別な-f アドレスプレフィックスに限定されない場合はすべてのアドレスファミリでinet:inet6、結果式にはorすべてのアドレスが含まれます。

  • B.ポート表現:
          dport >= :1024
          dport != :22
          sport < :32000
    

    など。

    すべて の関係:<、、、、、、、、、、、、、...希望のバリエーションを使用してください。ただし、コマンドラインに特殊文字を入力するときに特殊文字をエスケープすることを忘れないでください。 :-)>=>====!=eqgeltne

    ポート番号は構文的にケース A と一致します。 IP アドレスを追加することもできますが、AFe タイプの対応する述語と同じおよび を==除いて比較に参加しません。!=

    dst 10.0.0.1:22 同等 dport eq 10.0.0.1:22not dst 10.0.0.1:22 同等 dport neq 10.0.0.1:22

  • だ。キーワードautobound。ローカルシステムの自動的にバインドされたソケットと一致します。

4. 例

  • FIN-WAIT-11. 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、、、、。inetinet6linknetlink
  • -4- エイリアス-f inet
  • -6- エイリアス-f inet6
  • -0- エイリアス-f link
  • -A LIST-OF-TABLES- ダンプするソケットテーブルのコンマ区切りリスト。次 の識別子 が理解され ます。all、、、、、、、、、、、、、、、、。​​inettcpudprawunixpacketnetlinkunix_dgramunix_streampacket_rawpacket_dgram
  • -x- エイリアス-A unix
  • -t- エイリアス-A tcp
  • -u- エイリアス-A udp
  • -w- エイリアス-A raw
  • -a- ソケットのすべての状態を表示します。デフォルトでは、状態のソケットLISTENはスキップされます。TIME-WAITSYN_RECVCLOSE
  • -l- 状態にある店舗のみ表示LISTEN

STATE-FILTER

STATE-FILTER一致するすべての状態セットを構成できます。構文は、一連のキーワードstateexclude状態識別子で構成されています。使用可能な識別子は次のとおりです。

  • すべての標準TCP ステータス:established、、、、、、、、、、、および。 ​syn-sentsyn-recvfin-wait-1fin-wait-2time-waitclosedclose-waitlast-acklistenclosing
  • all- すべての州について
  • connectedlisten- とを除くすべての州closed
  • synchronizedconnected- 除くすべての州syn-sent
  • bucket- ミニソケットに保持されている状態、すなわち time-waitsyn-recv
  • big- と反対bucket

ADDRESS_FILTER

ADDRESS_FILTERは、Cスタイルのfeで短縮することができるandor および演算を使用するブール式です。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チャネルが維持されます。

PORTADDRESS_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_FILETCPソケットに関する情報のカーネルダンプを要求する代わりにファイルを開くように指定します。

/proc/このオプションは通常。

5.3 出力形式

6つの列。 1つ目は、Netid不明な場合のソケットタイプとトランスポートプロトコルです。tcp、、、udprawUNIXデータグラムソケット、netlink、および生およびデータグラムパケットソケットのu_str略語です。この列はオプションで、フィルタが一意のネットワークIDを選択した場合は非表示になります。unix_streamu_dgrnlp_rawp_dgr

2番目の列はですState。ソケットの状態がここに表示されます。これらの名前はUNCONNTCPでは不可能ですが、他の種類の接続されていないソケットでは一般的であることを除いて、標準のTCP名です。同様に、この列も非表示にできます。

その後、2つの列(およびRecv-QSend-Qには、受信および送信を待っているデータの量が表示されます。

最後の2つの列には、ソケットのローカルアドレスとポート、および対応するピアアドレス(ソケットが接続されている場合)が表示されます。

-ooptionsまたはが与えられると、-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 -atrtcp_diag - 0.47秒

コメントはありません。コメントが必要ですが、ほとんどの時間がtcp_diagカーネル内で無駄になり、ネットワークが完全にブロックされます。 10秒以上ならそうです。tcp_diag 同じ操作がシステム時間の100ミリ秒以内に実行されます。

関連情報