9个tcpdump使用实例

本文介绍了tcpdump命令的九个实用示例,包括指定网口、限制包数量、保存及读取包文件、禁用域名解析、增加时间戳、指定协议类型、指定端口以及过滤特定IP和端口等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/bangerlee/articles/2545612.html


tcpdump能帮助我们捕捉并保存网络包,保存下来的网络包可用于分析网络负载情况,包可通过tcpdump命令解析,也可以保存成后缀为pcap的文件,使用wireshark等软件进行查看。

 

以下将给出9个使用tcpdump的例子,以说明tcpdump的具体使用方法。

 

1.针对特定网口抓包(-i选项)

当我们不加任何选项执行tcpdump时,tcpdump将抓取通过所有网口的包;使用-i选项,我们可以在某个指定的网口抓包:

复制代码
linux:/tmp/lx # tcpdump -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
10:50:28.607429 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: . ack 116 win 64951
10:50:28.607436 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 116:232(116) ack 1 win 12864
10:50:30.384195 arp who-has 128.128.128.35 tell 128.128.128.35
复制代码

以上例子中,tcpdump抓取所有通过eth0的包。

 

2.抓取指定数目的包(-c选项)

默认情况下tcpdump将一直抓包,直到按下”ctrl+c”中止,使用-c选项我们可以指定抓包的数量:

复制代码
linux:/tmp/lx # tcpdump -c 2 -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
10:58:05.656104 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 1210443473:1210443589(116) ack 2583117929 win 12864
10:58:05.657074 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: . ack 116 win 65211

2 packets captured
6 packets received by filter
0 packets dropped by kernel
复制代码

以上例子中,只针对eth0网口抓2个包。

 

3.将抓到包写入文件中(-w选项)

使用-w选项,我们可将抓包记录到一个指定文件中,以供后续分析

复制代码
linux:/tmp/lx # tcpdump -w 20120606.pcap -i eth0
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

75 packets captured
150 packets received by filter
0 packets dropped by kernel
复制代码

应当保存为.pcap后缀的文件,方便我们使用wireshark等工具读取分析。

 

4.读取tcpdump保存文件(-r选项)

对于保存的抓包文件,我们可以使用-r选项进行读取:

复制代码
linux:/tmp/lx # tcpdump -r 20120606.pcap
reading from file 20120606.pcap, link-type EN10MB (Ethernet)
11:01:57.392907 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 1210446405:1210446457(52) ack 2583119957 win 12864
11:01:57.392917 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 52:168(116) ack 1 win 12864
11:01:57.393649 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: . ack 52 win 65327
复制代码

 

5.抓包时不进行域名解析(-n选项)

默认情况下,tcpdump抓包结果中将进行域名解析,显示的是域名地址而非ip地址,使用-n选项,可指定显示ip地址。

 

6.增加抓包时间戳(-tttt选项)

使用-tttt选项,抓包结果中将包含抓包日期:

复制代码
linux:/tmp/lx # tcpdump -n -tttt -i eth0
2012-06-06 11:14:59.539736 IP 10.71.171.140.22 > 10.70.121.95.1787: P 1:53(52) ack 100 win 7504
2012-06-06 11:14:59.539754 IP 10.71.171.140.22 > 10.70.121.95.1787: P 53:105(52) ack 100 win 7504
2012-06-06 11:14:59.539770 IP 10.71.171.140.22 > 10.70.121.95.1787: P 105:157(52) ack 100 win 7504
复制代码

 

7.指定抓包的协议类型

我们可以只抓某种协议的包,tcpdump支持指定以下协议:ip,ip6,arp,tcp,udp,wlan等。以下例子只抓取arp协议的包:

复制代码
linux:/tmp/lx # 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
11:22:26.948656 arp who-has 10.10.1.30 tell 10.10.1.26
11:22:27.017406 arp who-has 10.10.1.30 tell 10.10.1.26
11:22:27.078803 arp who-has 10.10.1.30 tell 10.10.1.26
复制代码

 

8.指定抓包端口

如果想要对某个特定的端口抓包,可以通过以下命令:

复制代码
linux:/tmp/lx # tcpdump -i eth0 port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:41:04.387547 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: . ack 1216136825 win 64751
11:41:04.387891 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 1:233(232) ack 0 win 16080
11:41:04.398973 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: P 0:52(52) ack 233 win 64519
复制代码

 

9.抓取特定目标ip和端口的包

网络包的内容中,包含了源ip地址、端口和目标ip、端口,我们可以根据目标ip和端口过滤tcpdump抓包结果,以下命令说明了此用法:

linux:/tmp/lx # tcpdump -i eth0 dst 10.70.121.92 and port 22

 

Reference: Packet Analyzer: 15 TCPDUMP Command Examples


### TCPDump 使用教程 TCPDump 是一种强大的命令行工具,用于捕获和分析网络流量。以下是关于其基本功能以及如何使用的详细介绍。 #### 基本语法 TCPDump 的通用语法如下: ```bash tcpdump [选项] [表达式] ``` 其中 `选项` 控制程序的行为,而 `表达式` 定义要捕获哪些类型的流量。 --- #### 1. 抓取指定网段的流量 可以使用 `-net` 参数来限定特定子网范围内的流量。例如,如果想抓取来自或去往 `192.168.1.0/24` 子网的所有数据包,则可执行以下命令[^1]: ```bash [root@benarchen ~]# tcpdump -ni eth0 net 192.168.1.0/24 ``` 上述命令中的参数含义为: - `-n`: 不解析主机名。 - `-i eth0`: 指定监听的网络接口为 `eth0`。 - `net 192.168.1.0/24`: 表示仅显示涉及该子网的数据流。 --- #### 2. 过滤 SYN 数据包 为了专注于某些特殊类型的数据传输过程(比如建立连接),可以通过设置过滤器捕捉仅有 SYN 标志位被置起始信号的数据帧。下面这个例子展示了怎样实现这一点[^2]: ```bash tcpdump -i xl0 'tcp[tcpflags] & (tcp-syn) != 0' ``` 或者更简洁的形式也可以写成这样: ```bash tcpdump -i xl0 tcp[13] == 2 ``` 这里的关键部分解释如下: - `'tcp[tcpflags]'` 提取出 TCP 头部标志字段的内容; - `(tcp-syn)` 对应于二进制表示下的第 2 位置上的比特值——即 SYN 标记的位置; - 当且仅当这一位有效时才匹配成功并记录下来相应的报文信息。 --- #### 3. 高级过滤条件组合 假设我们需要监测两台具体设备间通过 HTTP 协议交互的情况,并排除掉访问百度网站所产生的通讯行为,则可以用到较为复杂的布尔逻辑运算符构建查询语句[^3]: ```bash tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host ! www.baidu.com ``` 这条指令分解来看就是分别设置了目标地址(`dst`)、源地址(`src`)、服务端口号(`port`)还有否定某个域名(`!host`)等多个筛选维度共同作用的结果。 --- #### 4. 自动化控制抓包数量 有时候我们并不希望一直持续运行直到手动终止进程,而是预先设定好想要获取多少条符合条件的日志之后就自动退出。这时就可以利用 `-c` 参数配合具体的数值完成这项需求[^4]. 下面给出的例子说明了如何让系统仅仅收集八个 ICMP 类型的消息后再停止工作: ```bash tcpdump -i eth0 -n -c 8 icmp ``` 在此基础上还可以进一步扩展其他附加特性,像关闭 DNS 反向查找等功能以提高效率(-n),或是调整输出格式等等。 --- ### 总结 以上介绍了几种常见的场景下运用 Tcpdump 工具的方法论及其背后原理剖析。实际操作过程中可以根据具体情况灵活搭配不同的开关项与约束规则达成预期目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值