3

私は、 tcpdumpを使用してネットワーク インターフェイスを流れる TCP ヘッダーを監視およびフィルタリングするスクリプト (python+bash) を作成しました。すべてのインターフェースでスムーズに動作しますが、イーサネット en0インターフェースに関しては、Mac では root ユーザー ( ) として tcpdump を実行する必要がありますsudo

sudo で実行する必要を回避できるプログラムによる解決策はありますか?

Wiresharkのようなツールは、ユーザーに sudo パスワードを要求せずにそれを実行できることがわかりました。

sudo を必要としないソリューションは素晴らしいでしょう。

4

2 に答える 2

6

sudo で実行する必要を回避できるプログラムによる解決策はありますか?

「プログラマティック」とはどういう意味ですか?

Wiresharkがこれを行う方法は、そのインストーラーです

  1. グループを作成しaccess_bpf、ユーザーをそこに入れます。
  2. 現在の BPF デバイスのグループ所有者をaccess_bpf変更し、それらのアクセス許可を変更する StartupItem をインストールしますrw-rw----( ls -l /dev/bpf*jonschipp の回答の出力に従って)。

Wireshark をインストールするユーザーは、BPF を使用するプログラムを実行できます (libpcap を使用するすべてのプログラムは OS X で BPF を使用します。tcpdump と Wireshark は両方とも libpcap を使用します)。新しいBPF デバイス (必要に応じて自動的に作成されますが、権限付きで作成されrw-------、ユーザーとグループによって所有されますroot)。

したがって、Wireshark をインストールした場合は、Wireshark (および TShark、および両方がパケット キャプチャを行うために使用する dumpcap プログラム) を通常のユーザーとして実行してトラフィックをキャプチャできるだけでなく、たとえば次のように tcpdump を実行することもできます。通常のユーザーとトラフィックをキャプチャします。

つまり、これを有効にするのは Wiresharkコード内のものではないため、その意味では「プログラム的」ではありません。これを有効にするのは Wiresharkインストーラーによってインストールされるものであり、すべてのプログラムで有効になります。

于 2013-08-05T17:58:22.313 に答える
3

無差別モードにする必要がない場合は、通常のユーザーとして tcpdump を使用できます。プロミスキャス モードを無効にするには、「-p」オプションを使用します。

tcpdump -nni en0 -p

インターフェイスをプロミスキャス モードに設定する必要がある場合は、root アカウントを有効にして su 経由で root になり、スクリプトの実行に進むことができます。

su root -
python myscript.py

または

su -
python myscript.py

sudoのデフォルトでは、次のように実行できます(管理者と呼ばれる管理者アカウントを想定)

su Administrator
sudo su
python myscript.py

パスワード プロンプト sudo が気になる場合は、NOPASSWD オプションを使用するように /etc/sudoers ファイルを構成することで回避できます。その後、パスワード プロンプトなしで通常のユーザーとしてスクリプトを実行できます。

また、他のユーザーに bpf デバイス ファイルの読み取り権限を付与してみてください。注:私はこれをテストしていません。

$ ls -l /dev/bpf*
crw-rw----  1 root  access_bpf   23,   0 Aug  4 22:17 /dev/bpf0
crw-rw----  1 root  access_bpf   23,   1 Aug  4 22:16 /dev/bpf1
crw-rw----  1 root  access_bpf   23,   2 Aug  4 22:16 /dev/bpf2
crw-rw----  1 root  access_bpf   23,   3 Aug  4 22:16 /dev/bpf3

例えば

chmod o+r /dev/bpf*
于 2013-08-05T04:11:28.177 に答える