GNU/Linux >> Linux の 問題 >  >> Linux

ソケット オプションの表示

今日も同じ問題がありました。残念ながら、私のシステムでは -T lsof のオプション f を受け入れません フラグ、そして knetstat もビルドしたくなかった カーネル モジュール。

幸いなことに、私は strace できる立場にいました。 次のように、ソケットをセットアップしている間、アプリケーション:

strace -e trace=setsockopt -f -o /tmp/log ./program arg1 arg2

これは ./program arg1 arg2 をトレースします 、トレースを /tmp/log に書き込みます . setsockopt() のみをトレースします ソケットオプションを設定するために使用されるシステムコール。オプション -f strace になります トレースされたプログラムによって作成された子プロセスもトレースします。

運が良ければ /tmp/log 次のような行が含まれます:

18806 setsockopt(60, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0

これは、プロセス 18806 を示しています setsockopt() と呼ばれる FD 60SO_KEEPALIVE を設定する 1 まで (有効化)、およびシステム コールがリターン コード 0 で成功したこと .

既存のプロセスにアタッチすることも可能です:

strace -e trace=setsockopt -f -o /tmp/log -p PID

CTRL-C を使用してプロセスから切り離すことができます 、および -o を省略します トレースを stderr に送信するオプションとその引数 .


Linux では、knetstat カーネル モジュールを使用して、SO_BROADCAST を含むソケット オプションを調べることができます。 .


lsof(8) を使用できます . PID の場合 プロセスIDとFD 興味のあるソケットのファイル記述子番号です。これを行うことができます:

lsof -a -p PID -d FD -T f

プロセスのすべての IPv4 ソケットを一覧表示するには:

lsof -a -p PID -i 4 -T f

これにより、ソケット オプションが SO= で出力されます。 などの情報があります。オプションが設定されていない場合は、空の文字列が返されるため、SO=PQLEN=0 のように表示されることに注意してください。 など SO_BROADCAST をテストするには 、文字列 SO_BROADCAST を grep するだけです SO= の後 、例

if lsof -a -p PID -d FD -T f | grep -q 'SO=[^=]*SO_BROADCAST'; then
    # socket has SO_BROADCAST
else
    # it doesn't
fi

Linux
  1. 6tcpdumpネットワークトラフィックフィルターオプション

  2. 6つの高度なtcpdumpフォーマットオプション

  3. 便利なpsオプション

  1. MySQLデータベースタイプをbashで表示する

  2. Tmux Socket Api?

  3. Linuxlsコマンド

  1. 7Linuxでのlsofコマンドの例

  2. 方法:Pythonでのソケットプログラミング

  3. grub-install コマンド オプション