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


9

ネットワークインターフェイスを安全にシャットダウンする方法を見つけようとしています。つまり、プロセスを妨害することはありません。このため、現在そのインターフェイスを使用しているプロセスを見つける必要があります。ツールが好きssnetstatまたはlsofプロセスがオープンしているソケットを持って便利示しているが、それらは表示されませんwpa_supplicantdhcpcdhostapdなど。

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

回答:


13

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

ただし、いつNetlinkソケットに遭遇したかをかなり推測することは可能です。cat /proc/net/netlink開いているNetlinkソケットのリスト(それらを開いているプロセスのPIDを含む)を取得した場合。もしあれば、lsof -p $THEPIDそれらのPID、あなたがエントリを見つけるsockにはTYPE、列とcan't identify protocolNAMEコラム。これらがNetlinkソケットであることは保証されていませんが、かなり良い方法です。

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

さて、以上のことをすべて述べたので、あなたの質問は間違った方向に進んでいると思います。

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

結局、何がそんなに悪いのifconfig wlan0 downですか?

ネットワークインターフェイスはストレージデバイスではありません。データをディスクにフラッシュして、正常にアンマウントする必要はありません。オープンソケットを壊していないことは価値があるかもしれませんが、あなたが既に知っているとして、あなたがそれを把握することができますnetstatlsofwpa_supplicantあなたがそのインターフェースを無秩序にバウンスした場合、不機嫌になることはありません。(もしそうなら、それはバグであり、修正する必要があります。それはあなたのいくつかの欠陥を示すものではありません。)

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


どうもありがとうございました。lsofが私のシステムのnetlinkソケットを正しく報告していることがわかりました。ROUTEが必要なプロセスを見つけるには、grepで十分です。この情報を使用して何をしているのか:ユーザーがこのインターフェイスに関連付けられているプロセスを開始した場合にシャットダウンをキャンセルするかどうかをユーザーに尋ねる
ipsec

プロセスが接続されている特定のインターフェースを見つける方法はありますか?
ipsec

私は方法を知りませんstrace、彼らが起動するときにそれらを鳴らし、bind(2)呼び出しを待ちます。
ウォーレンヤング

また、このコマンドを使用してのproc fsの中の任意tun0「ファイル」を使用することができます find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID
frogstarr78
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.