tcpdumpがpcapファイルを書き込まないのはなぜですか?


8

接続できないように見えるpython ircボットをデバッグする過程で、「わかっています。tcpdumpを実行して、何が実行されているかを確認します」と考えました。だから私はいつものようにtcpdumpを実行しました、そしてそれはそれがキャプチャされたパケットであると言います、しかし実際にはcapファイルを書きません。

akraut@lance ~/pcaps $ sudo tcpdump -w pyhole -s 0 "port 6667"
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C17 packets captured
17 packets received by filter
0 packets dropped by kernel
4294966881 packets dropped by interface
akraut@lance ~/pcaps $ ls -la
total 8
drwxr-xr-x 2 akraut akraut 4096 Feb  6 11:50 .
drwxr-xr-x 8 akraut akraut 4096 Feb  6 11:50 ..
akraut@lance ~/pcaps $ 

絶対パスを指定するとどうなりますか?
Massimo

ボットは接続していeth0ますか?ループバックまたは別のインターフェースを使用している場合、ファイルにダンプするトラフィックはありません。
Chris S

1
@ Chris-sそれが表示された場合、それは17 packets received by filterそれがいくつかのトラフィックをキャプチャしたことを意味しませんか?
akraut

@Massimo ./blahと/ blahの両方を指定しようとしましたが、どちらもファイルを書き込みませんでした。
akraut

回答:


11

バイナリを流用する可能性があるgentooまたは別のディストリビューションにある場合、srootを使用したtcpdumpの動作をチェックして、chrootingなどの奇妙なことを行っていないか確認してください。


ああ、そうです。ebuildを見ると、privsとchrootがにドロップされているよう/var/lib/tcpdumpです。そして、なんと、私のcapファイルがすべてあります。
akraut

10

わかりました、謎を解きました。FuntooのTCPDumpとMystry of the Missing pcap Fileを解明しながら、私と一緒に進んでください。

straceを使用して何が起こっているかを確認しました。関連する行は次のとおりです。

chroot("/var/lib/tcpdump")              = 0
chdir("/")                              = 0
--- SNIP ---
open("/tmp/lol.wat", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory)

そう...

lance ~ # ls /var/lib/tcpdump/
blah  blah.cap  irc.cap  pyhole

ちょっと見て!作成しようとしたすべてのcapファイル!

tcpdumpがデフォルトで組み込まれている使用フラグを確認すると、次のように表示されます。

lance ~ # grep tcpdump /usr/portage/profiles/use*desc
use.local.desc:net-analyzer/tcpdump:chroot - Enable chrooting when dropping privileges

では、なぜこのようにするのでしょうか。私の理論は次のようになります:

  1. 生のネットワークトラフィックと相互作用する多くのアプリケーションは、ルートとして実行する必要があります。
  2. 生のネットワークトラフィックには、さまざまな有効値と無効値があります。
  3. これらのアプリケーションには多くのエクスプロイトが存在します。(Wireshark、Ethereal、tcpdumpなど)
  4. したがって、tcpdumpはrootの間にネットワークインターフェイスへのアクセスを取得し、自分自身を/var/lib/tcpdumpに監獄し、その後root権限をドロップし、キャプチャを開始します。

その結果、指定したとき、./blahまたはblahうまくいきました。しかし、存在/tmp/blahしないので/var/lib/tcpdump/tmpそうではありませんでした。

このすべての優れた機能は次のとおりです。suidフラグを使用してtcpdump SetUIDをインストールする場合、ユーザーにtcpdumpsudoまたはrootアクセス権を与えることなく、グループのアクセス権を付与できます。考えられる用途には、ネットワークエンジニアや研究者用のキャプチャボックスがあります。

Gentoo / Funtooにインストールに関するメッセージがあったらいいのにと思います。

tl; dr:Gentoo / Funtooはpcapファイルをに配置します/var/lib/tcpdump


3

構文は正しい:(ポート80ではあるが)試してみたところ、使用しているのと同じオプションを指定すると、現在の作業ディレクトリにpcapファイルが生成された。

(sudoのため)rootとして書き込もうとしているホームディレクトリに何か関係があるのでしょうか?ルートスカッシュでNFSマウントされたホームディレクトリを使用している可能性はありますか? sudo touch ~akraut/pcaps/foo

/ tmp /などにpcapを書き出せますか?


動作sudo tcpdump -w /tmp/blah -s 0 "port 6667"しているように見えますが、sudo su -最初にtcpdump -w /tmp/blah -s 0 "port 6667"rootとして実行すると、「そのようなファイルまたはディレクトリはありません」と表示されます。謎は深まります...
akraut

1
ジャスティンはあなたが答えを見つけるのを助けたようです。使用しているディストリビューション、およびそれがそのディストリビューションの標準のtcpdumpインストールであるかどうかを尋ねることはできますか?
cjc

Gentooの変種であるFuntooを実行しています。はい、デフォルトで、chroot "use"フラグ(オプションのコンパイル時機能を有効/無効にするGentooの方法)を設定します。私は実際にまもなくここに投稿するために、より長い記事を用意しました。
akraut
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.