tcpdump
次のようにデータをキャプチャしようとしています。
$ sudo tcpdump -Xi eth0
デバイスとPCを互いに接続しました。両側から相手にメッセージを送信する簡単なテストアプリケーションを実行します。
問題は両方ともメッセージを受け取りましたが、tcpdump
何も印刷されないことです。時にはARPリクエストのみが表示されることがあります。(現在LANに接続されていない他のPCへのARP要求)。
$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:0f:ea:62:ce:d6
inet addr:10.5.57.197 Bcast:10.5.255.255 Mask:255.255.0.0
inet6 addr: fe80::20f:eaff:fe62:ced6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:66497 errors:0 dropped:4334 overruns:0 frame:0
TX packets:3785 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6539170 (6.5 MB) TX bytes:553828 (553.8 KB)
Interrupt:21
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:529 errors:0 dropped:0 overruns:0 frame:0
TX packets:529 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:71721 (71.7 KB) TX bytes:71721 (71.7 KB)
答え1
パケットをキャプチャして<file>.pcap
拡張子を持つファイルに書き込みますwireshark
。
CentOSを例として、パケットをキャプチャします。
$ tcpdump -i eth0 -s 1500 -w /root/<filename.pcap>
答え2
何か違うことが起きているのは間違いありません。次のテストは私にとってうまくいきます。私はそれをクライアントとサーバーとして使用しており、私のローカルシステムで実行されていますsocat
。tcpdump
1. socatサーバー(リスナー)の設定
$ socat - TCP-LISTEN:2222,crlf
2. socat クライアントの設定
$ socat - TCP:192.168.1.80:2222
3. tcpdump を実行します。
$ sudo tcpdump -Xi wlp1s0 src 192.168.1.3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp1s0, link-type EN10MB (Ethernet), capture size 65535 bytes
10:04:27.977900 ARP, Request who-has 192.168.1.149 tell client.mydom.net, length 46
0x0000: 0001 0800 0604 0001 0019 d1e8 4c95 c0a8 ............L...
0x0010: 0103 0000 0000 0000 c0a8 0195 0000 0000 ................
0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
10:04:29.206642 ARP, Request who-has 192.168.1.149 tell client.mydom.net, length 46
0x0000: 0001 0800 0604 0001 0019 d1e8 4c95 c0a8 ............L...
0x0010: 0103 0000 0000 0000 c0a8 0195 0000 0000 ................
0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
10:04:29.337077 IP client.mydom.net.49878 > server.mydom.net.EtherNet/IP-1: Flags [P.], seq 1391164406:1391164421, ack 2721007444, win 46, options [nop,nop,TS val 535977938 ecr 956529523], length 15
0x0000: 4500 0043 8218 4000 4006 34f9 c0a8 0103 E..C..@[email protected].....
0x0010: c0a8 0150 c2d6 08ae 52eb 7bf6 a22f 4754 ...P....R.{../GT
0x0020: 8018 002e 964f 0000 0101 080a 1ff2 5fd2 .....O........_.
0x0030: 3903 7b73 5468 6973 2069 7320 6120 7465 9.{sThis.is.a.te
0x0040: 7374 0a st.
上記のシナリオでは、クライアント側に「This is a test」というメッセージを入力しましたが、サーバーのsocat
インスタンスにも表示されましたtcpdump
。
$ socat - TCP:server.mydom.net:2222
This is a test
サーバー出力:
$ socat - TCP-LISTEN:2222,crlf
This is a test
答え3
この問題に直面している人のための別の素晴らしい答えがあります。https://stackoverflow.com/questions/3130911/tcpdump-localhost-to-localhost、表示されていないトラフィックがlocalhost->localhostトラフィックの場合。他の状況ではこれを行う必要はないようですが、少なくともしなければならない場合が数回あります。
答え4
この試み:
sudo bash
それから
tcpdump ...
一部のLinuxバージョンでは、tcpdumpまたは同様のツールがsudoで期待どおりに機能しない場合があります。