tcpdump 似乎没有捕获任何数据,为什么?

tcpdump 似乎没有捕获任何数据,为什么?

我正在尝试tcpdump像这样捕获数据:

$ sudo tcpdump -Xi eth0

我已将设备和 PC 相互连接。在双方上,我启动一个简单的测试应用程序,向对方发送消息。

问题是,虽然双方都收到了消息,但tcpdump没有打印任何内容。有时只能看到 ARP 请求(ARP 请求当前未连接到 LAN 的另一台 PC)

$  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.

在上面的场景中,我在客户端输入了消息“这是一个测试”,它显示在服务器的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 一起使用。

相关内容