web-dev-qa-db-ja.com

ネットワークインターフェイスを使用してプロセスを検索する

ネットワークインターフェースを安全にシャットダウンする方法を見つけようとしています。つまり、プロセスを妨害することはありません。そのために、現在そのインターフェイスを使用しているプロセスを見つける必要があります。 ssnetstatlsofなどのツールは、開いているソケットがあるプロセスを示すのに役立ちますが、wpa_supplicantdhcpcdhostapdなど。

これらのプロセスを一般的な方法で検出する方法はありますか? dhcpcdは時々ソケットを開くだけのプログラムなので、そうではないかもしれませんが、wpa_supplicantとhostapdがそのインターフェイスに対して「何かを実行」して、検出可能であり、おそらく関連するPIDにもつながると想定しています。

9
ipsec

そのようなプログラムは Netlink sockets を使用して、ネットワークハードウェアのドライバーと直接通信します。 lsofバージョン4.85 追加 Netlinkソケットのサポートですが、CentOS 5.8での私のテストでは、機能がうまく機能していないようです。おそらく、新しいカーネルに追加された機能に依存します。

ただし、いつNetlinkソケットに遭遇したかをかなり推測することは可能です。 cat /proc/net/netlinkを実行すると、開いているNetlinkソケットのリストが、それらを開いているプロセスのPIDを含めて取得されます。次に、これらのPIDをlsof -p $THEPIDすると、sock列にTYPENAME列にcan't identify protocolのエントリが見つかります。これらがNetlinkソケットであることは保証されていませんが、かなり良い方法です。

また、/sys/class/net/$IFNAMEの下に開いているファイルがある場合、特定のプロセスがインターフェースと直接通信していると推測することもできます。

さて、これらのことはすべて言ったので、私はあなたの質問が間違ったものだと思います。

まだ発見していないコマンドがあるとしましょう。それをlsif -i wlan0と呼び、名前付きインターフェイスにアクセスするPIDのリストを返すと言います。あなたが要求したように、そのインターフェースを使用してプロセスを「邪魔しない」ことを可能にする、それで何ができるでしょうか?最初にそのインターフェースを使用してすべてのプロセスを終了することを計画していましたか?それはかなり不安です。 :)代わりに、インターフェースを使用しているプロセスの下からインターフェースを削除することは、どういうわけか有害であると考えていましたか?

結局、ifconfig wlan0 downの何が悪いのでしょうか。

ネットワークインターフェイスはストレージデバイスではありません。データをディスクにフラッシュして、正常にアンマウントする必要はありません。開いているソケットを壊さないことは価値があるかもしれませんが、ご存じのとおり、netstatlsofを使用してそれを理解できます。 wpa_supplicantは、そのインターフェースを無秩序にバウンスしても不自然になりません。 (もしそうなら、それはバグであり、修正する必要があります;それはあなたのいくつかの欠陥を示すものではありません。)

よく書かれたネットワークプログラムは当然のことなどに対応しています。ネットワークは信頼できません。プログラムがバウンスされているインターフェイスに対応できない場合は、プラグが外れているイーサネットケーブル、不安定なDSLモデム、または backhoes にも対応できません。

13
Warren Young