tcpdump抓包不能实时显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcpdump抓包不能实时显示相关的知识,希望对你有一定的参考价值。

是一个命令行实用工具,允许你抓取和分析经过系统的流量数据包。它通常被用作于网络故障分析工具以及安全工具。

并且支持多种选项和过滤规则,适用场景十分广泛。

由于它是命令行工具,因此适用于在远程服务器或者没有图形界面的设备中收集数据包以便于事后分析。

它可以在后台启动,也可以用 cron 等定时工具创建定时任务启用它。

2. 安装

tcpdump 支持多种 Linux 发行版,所以你的系统中很有可能已经安装了它。用下面的命令检查一下是否已经安装了 tcpdump:

$ which tcpdump
/usr/sbin/tcpdump
1
2
1
2
如果还没有安装 tcpdump,你可以用软件包管理器安装它。 例如,在 CentOS 或者 Red Hat Enterprise 系统中,用如下命令安装 tcpdump:

sudo yum install tcpdump
1
1
在ubuntu下安装:

sudo apt-get install tcpdump
1
1
tcpdump 依赖于 libpcap,该库文件用于捕获网络数据包。如果该库文件也没有安装,系统会根据依赖关系自动安装它。

安装完成后就可以抓包了。

3. 抓包

使用 tcpdump 抓包,需要管理员权限,因此下面的示例中绝大多数命令都是以 sudo 开头。

首先,先用 tcpdump -D 命令列出可以抓包的网络接口:

$ sudo tcpdump -D
1.eth0
2.virbr0
3.eth1
4.any (Pseudo-device that captures on all interfaces)
5.lo [Loopback]
1
2
3
4
5
6
1
2
3
4
5
6
如上所示,可以看到机器中所有可以抓包的网络接口。其中特殊接口 any 可用于抓取所有活动的网络接口的数据包。

我们就用如下命令先对 any 接口进行抓包:

$ sudo tcpdump -i any
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:56:18.293641 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3770820720:3770820916, ack 3503648727, win 309, options [nop,nop,TS val 76577898 ecr 510770929], length 196
09:56:18.293794 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 391, options [nop,nop,TS val 510771017 ecr 76577898], length 0
09:56:18.295058 IP rhel75.59883 > gateway.domain: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43)
09:56:18.310225 IP gateway.domain > rhel75.59883: 2486 NXDomain* 0/1/0 (102)
09:56:18.312482 IP rhel75.49685 > gateway.domain: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44)
09:56:18.322425 IP gateway.domain > rhel75.49685: 34242 NXDomain* 0/1/0 (103)
09:56:18.323164 IP rhel75.56631 > gateway.domain: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44)
09:56:18.323342 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 196:584, ack 1, win 309, options [nop,nop,TS val 76577928 ecr 510771017], length 388
09:56:18.323563 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 584, win 411, options [nop,nop,TS val 510771047 ecr 76577928], length 0
09:56:18.335569 IP gateway.domain > rhel75.56631: 29904 NXDomain* 0/1/0 (103)
09:56:18.336429 IP rhel75.44007 > gateway.domain: 61677+ PTR? 98.122.168.192.in-addr.arpa. (45)
09:56:18.336655 IP gateway.domain > rhel75.44007: 61677* 1/0/0 PTR rhel75. (65)
09:56:18.337177 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 584:1644, ack 1, win 309, options [nop,nop,TS val 76577942 ecr 510771047], length 1060
---- SKIPPING LONG OUTPUT -----
09:56:19.342939 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 1752016, win 1444, options [nop,nop,TS val 510772067 ecr 76578948], length 0
^C
9003 packets captured
9010 packets received by filter
7 packets dropped by kernel
$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
tcpdump 会持续抓包直到收到中断信号。你可以按 Ctrl+C 来停止抓包。正如上面示例所示,tcpdump 抓取了超过 9000 个数据包。在这个示例中,由于我是通过 ssh 连接到服务器,所以 tcpdump 也捕获了所有这类数据包。-c 选项可以用于限制 tcpdump 抓包的数量:

$ sudo tcpdump -i any -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:21:30.242740 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3772575680:3772575876, ack 3503651743, win 309, options [nop,nop,TS val 81689848 ecr 515883153], length 196
11:21:30.242906 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 1443, options [nop,nop,TS val 515883235 ecr 81689848], length 0
11:21:30.244442 IP rhel75.43634 > gateway.domain: 57680+ PTR? 1.64.168.192.in-addr.arpa. (43)
11:21:30.244829 IP gateway.domain > rhel75.43634: 57680 NXDomain 0/0/0 (43)
11:21:30.247048 IP rhel75.33696 > gateway.domain: 37429+ PTR? 28.64.168.192.in-addr.arpa. (44)
5 packets captured
12 packets received by filter
0 packets dropped by kernel
$
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
如上所示,tcpdump 在抓取 5 个数据包后自动停止了抓包。这在有些场景中十分有用 —— 比如你只需要抓取少量的数据包用于分析。当我们需要使用过滤规则抓取特定的数据包(如下所示)时,-c 的作用就十分突出了。

在上面示例中,tcpdump 默认是将 IP 地址和端口号解析为对应的接口名以及服务协议名称。而通常在网络故障排查中,使用 IP 地址和端口号更便于分析问题;用 -n 选项显示 IP 地址,-nn 选项显示端口号:

$ sudo tcpdump -i any -c5 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
23:56:24.292206 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 166198580:166198776, ack 2414541257, win 309, options [nop,nop,TS val 615664 ecr 540031155], length 196
23:56:24.292357 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 196, win 1377, options [nop,nop,TS val 540031229 ecr 615664], length 0
23:56:24.292570 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 372
23:56:24.292655 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 568, win 1400, options [nop,nop,TS val 540031229 ecr 615664], length 0
23:56:24.292752 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 568:908, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 340
5 packets captured
6 packets received by filter
0 packets dropped by kernel
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
如上所示,抓取的数据包中显示 IP 地址和端口号。这样还可以阻止 tcpdump 发出 DNS 查找,有助于在网络故障排查中减少数据流量。

现在你已经会抓包了,让我们来分析一下这些抓包输出的含义吧。
仅供参考
参考技术A tcpdump是Linux系统下的一款抓包命令集,工作原理是基于网卡抓取流动在网卡上的数据包。在Linux系统中由于tcpdump命令的简单和强大,我们一般直接使用tcpdump命令来抓取数据包。保存之后,拖下来在wireshark中分析。

怎样判断你的Linux系统中是否有tcpdump呢?很简单输入一下命令:

tcpdump -h
若出现以下信息,恭喜你躲过一劫(Linux一般会自带)。

如果没有那么得先在Linux安装这个软件了。你以为很难么,一行命令就搞定啦:

yum install -y tcpdump
安装完成之后敲入命令:

tcpdump -h

Tcpdump抓包工具

tcpdump是linux下常用的抓包工具:

tcpdump的选项有很多,但是我们常用的不多:

-i:interface 监听的网卡。
-nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。
-A:以ascii的方式显示数据包,抓取web数据时很有用。
-X:数据包将会以16进制和ascii的方式显示。

表达式:表达式有很多种,常见的有:host 主机;port 端口;src host 发包主机;dst host 收包主机。多个条件可以用and、or组合,取反可以使用!

注意在使用tcpdump时需要把用户更换到root用户,只有root用户才能使用tcpdump命令!


抓取网卡0的数据包10个:

[[email protected] ~]# tcpdump -i eth0 -c 10  /-c  指定抓取数据包的数量
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
02:34:24.703714 IP 192.168.1.112.ssh > 192.168.1.103.50134: Flags [P.], seq 3880171609:3880171805, ack 723186096, win 304, length 196
02:34:24.705623 ARP, Request who-has 192.168.1.1 tell 192.168.1.112, length 28
02:34:24.708147 ARP, Reply 192.168.1.1 is-at bc:46:99:41:22:de (oui Unknown), length 46
02:34:24.708153 IP 192.168.1.112.46550 > google-public-dns-a.google.com.domain: 28064+ PTR? 103.1.168.192.in-addr.arpa. (44)
02:34:24.803903 IP google-public-dns-a.google.com.domain > 192.168.1.112.46550: 28064 NXDomain 0/0/0 (44)
02:34:24.804331 IP 192.168.1.112.60134 > google-public-dns-a.google.com.domain: 1919+ PTR? 112.1.168.192.in-addr.arpa. (44)
02:34:24.881789 IP 192.168.1.112.ssh > 192.168.1.103.50134: Flags [P.], seq 4294967244:196, ack 1, win 304, length 248
02:34:24.882223 IP 192.168.1.103.50134 > 192.168.1.112.ssh: Flags [.], ack 196, win 252, options [nop,nop,sack 1 {4294967244:196}], length 0
02:34:24.903700 IP google-public-dns-a.google.com.domain > 192.168.1.112.60134: 1919 NXDomain 0/0/0 (44)
02:34:24.904152 IP 192.168.1.112.56792 > google-public-dns-a.google.com.domain: 22232+ PTR? 1.1.168.192.in-addr.arpa. (42)
10 packets captured
17 packets received by filter
0 packets dropped by kernel
[[email protected] ~]#

以ip和端口号的形式显示,并且把显示的内容放入文件1.cap中

[[email protected] ~]# tcpdump -nn -c 10 -w 1.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel
[[email protected] ~]#

查看1.cap文件中的内容:/注意这样的文件用一本编辑器是打不开的!

[[email protected] ~]# tcpdump -r 1.cap
reading from file 1.cap, link-type EN10MB (Ethernet)
02:37:13.275584 IP 192.168.1.112.ssh > 192.168.1.103.50134: Flags [P.], seq 3880175945:3880176077, ack 723188752, win 304, length 132
02:37:13.475110 IP 192.168.1.103.50134 > 192.168.1.112.ssh: Flags [.], ack 132, win 253, length 0
02:37:13.942809 ARP, Request who-has 192.168.1.104 tell 192.168.1.1, length 46
02:37:14.966198 ARP, Request who-has 192.168.1.104 tell 192.168.1.1, length 46
02:37:15.900875 ARP, Request who-has 192.168.1.104 tell 192.168.1.1, length 46
02:37:16.403112 IP 192.168.1.1.1024 > 192.168.1.255.commplex-link: UDP, length 115
02:37:16.907312 IP6 fe80::249d:5806:de62:3dfa.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
02:37:19.260750 IP6 fe80::1576:7a67:2445:cbbf.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
02:37:24.993190 IP6 fe80::249d:5806:de62:3dfa.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
02:37:26.425316 IP 192.168.1.1.ssdp > 239.255.255.250.ssdp: UDP, length 266
[[email protected] ~]#


本文出自 “自定义” 博客,谢绝转载!

以上是关于tcpdump抓包不能实时显示的主要内容,如果未能解决你的问题,请参考以下文章

tcpdump规则过滤抓包及结果筛选查看

tcpdump 常见问题

tcpdump抓包工具

TCPdump抓包命令详解

TCPDUMP 抓包 怎么查看 抓的包的内容

tcpdump抓包