数据包分析器:15 个 TCPDUMP 命令示例
tcpdump 命令也称为数据包分析器。
tcpdump 命令适用于大多数风格的 unix 操作系统。tcpdump 允许我们保存捕获的数据包,以便我们可以将其用于以后的分析。保存的文件可以通过相同的 tcpdump 命令查看。我们也可以使用wireshark等开源软件来读取tcpdump pcap文件。
在本 tcpdump 教程中,让我们讨论一些有关如何使用 tcpdump 命令的实际示例。
1. 使用 tcpdump -i 从特定以太网接口捕获数据包
当不带任何选项执行 tcpdump 命令时,它将捕获所有流经所有接口的数据包。tcpdump 命令的 -i 选项允许您在特定的以太网接口上进行过滤。
$ tcpdump -i eth1
14:59:26.608728 IP xx.domain.netbcp.net.52497 > valh4.lell.net.ssh: . ack 540 win 16554
14:59:26.610602 IP resolver.lell.net.domain > valh4.lell.net.24151: 4278 1/0/0 (73)
14:59:26.611262 IP valh4.lell.net.38527 > resolver.lell.net.domain: 26364+ PTR? 244.207.104.10.in-addr.arpa. (45)
在本例中,tcpdump 捕获了接口 eth1 中的所有数据包流并显示在标准输出中。
注意:Editcap实用程序用于从转储文件中选择或删除特定数据包并将它们转换为给定格式。
2.使用tcpdump -c只捕获N个数据包
当您执行 tcpdump 命令时,它会提供数据包,直到您取消 tcpdump 命令。使用 -c 选项可以指定要捕获的数据包数量。
$ tcpdump -c 2 -i eth0
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
14:38:38.184913 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 1457255642:1457255758(116) ack 1561463966 win 63652
14:38:38.690919 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 116:232(116) ack 1 win 63652
2 packets captured
13 packets received by filter
0 packets dropped by kernel
上面的 tcpdump 命令只从接口 eth0 捕获了 2 个数据包。
注意:Mergecap 和 TShark:Mergecap 是一个数据包转储组合工具,它将多个转储组合成一个转储文件。Tshark 是一个强大的网络数据包捕获工具,可用于分析网络流量。它带有wireshark网络分析仪发行版。
3. 使用 tcpdump -A 以 ASCII 格式显示捕获的数据包
以下 tcpdump 语法以 ASCII 格式打印数据包。
$ tcpdump -A -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
14:34:50.913995 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 1457239478:1457239594(116) ack 1561461262 win 63652
E.....@.@..]..i...9...*.V...]...P....h....E...>{..U=...g.
......G..7\+KA....A...L.
14:34:51.423640 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 116:232(116) ack 1 win 63652
E.....@.@..\..i...9...*.V..*]...P....h....7......X..!....Im.S.g.u:*..O&....^#Ba...
E..(R.@.|.....9...i.*...]...V..*P..OWp........
4. 使用 tcpdump -XX 以 HEX 和 ASCII 显示捕获的数据包
一些用户可能想要以十六进制值分析数据包。tcpdump 提供了一种以 ASCII 和 HEX 格式打印数据包的方法。
$tcpdump -XX -i eth0
18:52:54.859697 IP zz.domain.innetbcp.net.63897 > valh4.lell.net.ssh: . ack 232 win 16511
0x0000: 0050 569c 35a3 0019 bb1c 0c00 0800 4500 .PV.5.........E.
0x0010: 0028 042a 4000 7906 c89c 10b5 aaf6 0f9a .(.*@.y.........
0x0020: 69c4 f999 0016 57db 6e08 c712 ea2e 5010 i.....W.n.....P.
0x0030: 407f c976 0000 0000 0000 0000 @..v........
18:52:54.877713 IP 10.0.0.0 > all-systems.mcast.net: igmp query v3 [max resp time 1s]
0x0000: 0050 569c 35a3 0000 0000 0000 0800 4600 .PV.5.........F.
0x0010: 0024 0000 0000 0102 3ad3 0a00 0000 e000 .$......:.......
0x0020: 0001 9404 0000 1101 ebfe 0000 0000 0300 ................
0x0030: 0000 0000 0000 0000 0000 0000 ............
5. 捕获数据包并使用 tcpdump -w 写入文件
tcpdump 允许您将数据包保存到文件中,稍后您可以使用数据包文件进行进一步分析。
$ tcpdump -w 08232010.pcap -i eth0
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
32 packets captured
32 packets received by filter
0 packets dropped by kernel
-w 选项将数据包写入给定文件。文件扩展名应该是 .pcap,它可以被任何网络协议
分析器读取。
6. 使用 tcpdump -r 从保存的文件中读取数据包
可以读取抓到的pcap文件,查看数据包进行分析,如下图。
$tcpdump -tttt -r data.pcap
2021-08-22 21:35:26.571793 00:50:56:9c:69:38 (oui Unknown) > Broadcast, ethertype Unknown (0xcafe), length 74:
0x0000: 0200 000a ffff 0000 ffff 0c00 3c00 0000 ............<...
0x0010: 0000 0000 0100 0080 3e9e 2900 0000 0000 ........>.).....
0x0020: 0000 0000 ffff ffff ad00 996b 0600 0050 ...........k...P
0x0030: 569c 6938 0000 0000 8e07 0000 V.i8........
2021-08-22 21:35:26.571797 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.50570: P 800464396:800464448(52) ack 203316566 win 71
2021-08-22 21:35:26.571800 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.50570: P 52:168(116) ack 1 win 71
2021-08-22 21:35:26.584865 IP valh5.lell.net.ssh > 11.154.12.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADC
7. 使用 tcpdump -n 捕获带有 IP 地址的数据包
在上述所有示例中,它打印带有 DNS 地址的数据包,而不是 ip 地址。以下示例捕获数据包,并将显示所涉及机器的 IP 地址。
$ tcpdump -n -i eth0
15:01:35.170763 IP 10.0.19.121.52497 > 11.154.12.121.ssh: P 105:157(52) ack 18060 win 16549
15:01:35.170776 IP 11.154.12.121.ssh > 10.0.19.121.52497: P 23988:24136(148) ack 157 win 113
15:01:35.170894 IP 11.154.12.121.ssh > 10.0.19.121.52497: P 24136:24380(244) ack 157 win 113
8. 使用 tcpdump -tttt 捕获具有正确可读时间戳的数据包
$ tcpdump -n -tttt -i eth0
2021-08-22 15:10:39.162830 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 49800 win 16390
2021-08-22 15:10:39.162833 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 50288 win 16660
2021-08-22 15:10:39.162867 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 50584 win 16586
9. 读取长度超过 N 字节的数据包
您只能通过 tcpdump 命令使用过滤器“greater”接收大于 n 个字节的数据包
$ tcpdump -w g_1024.pcap greater 1024
10. 只接收特定协议类型的数据包
您可以根据协议类型接收数据包。您可以指定这些协议之一 — fddi、tr、wlan、ip、ip6、arp、rarp、decnet、tcp 和 udp。以下示例仅捕获流经 eth0 接口的 arp 数据包。
$ tcpdump -i eth0 arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
19:41:52.809642 arp who-has valh5.lell.net tell valh9.lell.net
19:41:52.863689 arp who-has 11.154.12.1 tell valh6.lell.net
19:41:53.024769 arp who-has 11.154.12.1 tell valh7.lell.net
11.读取小于N字节的数据包
您只能通过 tcpdump 命令使用过滤器“less”接收少于 n 个字节的数据包
$ tcpdump -w l_1024.pcap less 1024
12. 使用 tcpdump 端口接收特定端口上的数据包流
如果您想知道机器上特定端口接收到的所有数据包,您可以使用 tcpdump 命令,如下所示。
$ tcpdump -i eth0 port 22
19:44:44.934459 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 18932:19096(164) ack 105 win 71
19:44:44.934533 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 19096:19260(164) ack 105 win 71
19:44:44.934612 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 19260:19424(164) ack 105 win 71
13. Capture packets for particular destination IP and Port
13. 捕获特定目标 IP 和端口的数据包
数据包将具有源和目标 IP 以及端口号。使用 tcpdump 我们可以对源或目标 IP 和端口号应用过滤器。以下命令捕获具有特定目标 IP 和端口号 22 的 eth0 中的数据包流。
$ tcpdump -w xpackets.pcap -i eth0 dst 10.181.140.216 and port 22
14.捕获两台主机之间的TCP通信包
如果来自两台不同机器的两个不同进程通过 tcp 协议进行通信,我们可以使用 tcpdump 捕获这些数据包,如下所示。
$tcpdump -w comm.pcap -i eth0 dst 16.181.170.246 and port 22
您可以使用任何网络协议分析器工具打开文件 comm.pcap 以调试任何潜在问题。
15. tcpdump Filter Packets – 捕获除arp和rarp以外的所有数据包
在 tcpdump 命令中,您可以给出“and”、“or”和“not”条件来相应地过滤数据包。
$ tcpdump -i eth0 not arp and not rarp
20:33:15.479278 IP resolver.lell.net.domain > valh4.lell.net.64639: 26929 1/0/0 (73)
20:33:15.479890 IP valh4.lell.net.16053 > resolver.lell.net.domain: 56556+ PTR? 255.107.154.15.in-addr.arpa. (45)
20:33:15.480197 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 540:1504(964) ack 1 win 96
20:33:15.487118 IP zz.domain.innetbcp.net.63897 > valh4.lell.net.ssh: . ack 540 win 16486
20:33:15.668599 IP 10.0.0.0 > all-systems.mcast.net: igmp query v3 [max resp time 1s]
- 点赞
- 收藏
- 关注作者
评论(0)