プロセスがタップインターフェイスに接続されているかどうかを知る方法は?


9

タップインターフェイスを備えたマシンに出くわすことがあります(KVMが実行されているときなど)。どのプロセスがTAPインターフェイスに接続されているかを知るにはどうすればよいですか?


あなたはこれを使ってこれを行うことができると思いますがnmap、私は正直に言う方法がわかりません。
Alex Chamberlain

回答:


2

これで不思議に思い、Linuxカーネルのソースを調べました(Linuxに関する質問だと思います)。

予想よりも答えが難しいようです。このTUN / TAP APIチュートリアルページは、洞察を提供します。基本的に、プログラムはを開い/dev/net/tunて送信することにより、新しいTUN / TAPデバイスを割り当てますTUNSETIFF ioctl。すべてがうまくいけば、インターフェースが作成され、カーネルがその名前とファイル記述子を提供します。それが管理方法です。

ここには2つのキャッチがあります。

  1. カーネルは、ioctlを送信したプロセスのPIDを格納しませんstruct tun_struct(TUNとTAPは、ほとんど同じデータ構造を共有しています)。
  2. プロセスは、インターフェイスを永続的としてマークし、そのファイル記述子を閉じてから、通常のネットワークインターフェイスとして使用できます。

実際には、2はそれほど発生しないと思います。openvpnプロセスをチェックアウトするlsofと、TAPデバイスへのファイル記述子がまだ開いており、明らかに使用されていることがわかりますが、/dev/net/tunは一種の多重化デバイスな/dev/ptmxので、を使用lsofして、現在TUN / TAPデバイスを使用しているプロセスを見つけることができますが、どのプロセスがどのデバイスを使用しているかはわかりません。

根本的な問題を解決する斜めの方法があります。OpenVPNの場合は、OpenVPN構成ファイルのベース名を含む、よりわかりやすい名前でtunX/ tapXデバイスに名前を付けるトンネルセットアップスクリプトを使用します。したがって、デバイスに/etc/openvpn/foo.confつながりvpn-fooます。次に、OpenvVPNプロセスを、使用しているインターフェイスと関連付けることができます。ただし、まだQEmu / KVMでこれを行う必要はありません。


OK。また、「多重化」している/ dev / net / tunは、プロセスが接続されているタップインターフェイスを正確に知ることを妨げるのではないかと疑っていました。
user368507

5

各ファイル記述子には、次のような/ proc / pid / fdinfo / numエントリがあります。

# cat /proc/24332/fdinfo/28
pos:    0
flags:  0104002
mnt_id: 18
iff:    tap0123acdc-66

したがって、インターフェース名を使用すると、次のコマンドでpidを取得できます。

# egrep -l iff:.*tap0123acdc-66 /proc/*/fdinfo/* 2>/dev/null|cut -d/ -f3
24332

私の作品:qemuプロセスの% sudo bash -c 'grep -l iff:.*vnet0 /proc/*/fdinfo/* 2>/dev/null | cut -d/ -f3' 4143 % pgrep qemu 4143 出力に表示される名前パラメーターがあるという事実を考えるとps -ef、たとえばqemu-system-x86_64 -enable-kvm -name debian-8、pidとインターフェイスがどのVMに対応するかを簡単に確認できるはずです。
Dmitrii S. 2016

1

FreeBSDまたはその他のBSD派生物:

ifconfig tap0

インターフェイスに接続されているプロセスが表示されます。

tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=80000<LINKSTATE>
    ether 58:9c:fc:10:8f:2b
    groups: tap
    media: Ethernet autoselect
    status: active
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    Opened by PID 2672

これを試しているOSとバージョンは何ですか?この情報があれば非常に便利ですが(私は数十のVPNエンドポイントでボックスを実行しています)、Debian ifconfigはこれを表示しません。ちなみに、これらはtapOpenVPNによって作成されたデバイスです—違いがある理由はわかりません。
Alexios

これは、FreeBSDまたはその他のBSD派生物に関するものです。
kworr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.