linux下使用tcpdump工具分析UDP报文

本文介绍了如何使用tcpdump工具捕获和分析UDP报文,包括基本使用参数如-i、-nn、-A、-X,以及规则表达式的应用。举例说明了如何查看特定主机和端口的报文,并展示了报文示例及分析,帮助读者理解UDP报文格式和IP报文结构。

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

1、背景

在调试UDP协议时,总是会遇到需要查看UDP报文的内容情况,或许是为了验证自己写的序列化组包是否正确,或者接受到的报文是否合法,亦或是为了查看自己发送或者接收的报文频率是否合格。无论出于什么目的,都要查看报文原始内容。在进行这一工作时,总是要百度搜tcpdump,还要搜UDP协议格式,还得搜IP协议格式。所以特此综合网络上的先者们的优秀博文。方便有此种特定需求场景的后者们参考。

 

2、tcpdump工具使用方式

简介:

tcpdump命令行工具的详细使用方法,可以仔细通读man手册。

man tcpdump

参数有很多,但如果掌握如下几个参数就可以满足大部分的调试场景了:

  • -i:interface 指定要监听的网卡。
  • -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。
  • -A:以ascii的方式显示数据包,抓取带有字符串的数据包时可以很方便的看到对应的字符串内容。
  • -X:数据包将会以16进制(左)ascii(右)的方式分两排显示,方便对照。
tcpdump [-i 网卡] -nnAX '规则表达式'

规则表达式

规则表达式中要使用关键字并且要遵从特定的语法要求。

常用的关键字有:

  • host:主机;
  • port:端口;
  • src host:发包主机;
  • dst host: 收包主机。
  • and、or、!:逻辑"与""或""非",多个条件时可以组合使用,更多的使用可以查看 man 7 pcap-filter

 

实例:

# 查看本机发往ip为10.1.5.11的主机的11262端口号的报文
tcpdump -i eth0 -nnX 'dst host 10.1.5.11 and port 11262'

 

截取一个报文示例如下:

15:16:07.849810 IP 10.1.5.6.42481 > 10.1.5.11.11262: UDP, length 86
        0x0000:  4500 0072 7f16 4000 4011 9d52 0a01 0506  E..r..@.@..R....
        0x0010:  0a01 050b a5f1 2bfe 005e 1e82 fafb 0101  ......+..^......
        0x0020:  2205 004b 46b2 1422 8dcd 4c6e 6466 0606  "..KF.."..Lndf..
        0x0030:  a917 2765 3644 64db 81d8 0000 44ab 000d  ..'e6Dd.....D...
        0x0040:  ef00 10ca 0032 0cc6 e5bf 6a08 7b37 f5c8  .....2....j.{7..
        0x0050:  b104 1c78 f4e4 cbbb a20a 1cb7 eecb c002  ...x............
        0x0060:  afff 226f fce6 cb00 097f 0011 0c00 6250  .."o..........bP
        0x0070:  eced    

 

 

3、报文分析

通过tcpdump工具获取到了发送或接收到的报文包,但是如何读取,还需要了解UDP报文格式。

UDP报文格式

UDP协议和TCP协议同位于传输层,介于网络层(IP)和应用层之间。

UDP数据部分为应用层报文,而UDP报文再向下层(OSI七层网络模型)网络层(IP协议)传递时,会被加上IP协议头。

一个通用的IP报文的示例如下图所示: 

IP首部:

 

 

UDP首部

 

<think>好的,我现在需要帮助用户学习如何使用tcpdump进行报文分析。用户明确要求教程和使用方法,以及网络抓包的指导。首先,我应该回顾自己掌握的相关知识,确保回答准确。 首先,我应该介绍tcpdump的基本概念,比如它是命令行工具,用于捕获网络流量。然后,安装方法,特别是用户提到的CentOS系统,需要给出具体的安装命令,比如yum install tcpdump。接下来,基本命令结构,比如常见的参数-i、port、host等,这些是用户常用的选项。 然后,需要给出常用的过滤表达式,例如按协议、端口、主机过滤,还有组合条件。这部分用户可能不熟悉,需要详细说明每个过滤器的用法,比如tcp port 80或host 192.168.1.1。同时,保存和读取捕获文件的方法也很重要,用户可能需要后续分析,所以-w和-r参数要提到。 接下来,实际案例是关键,用户可能想看到具体的例子。比如抓取HTTP流量、DNS请求、特定主机的ICMP包。每个案例给出具体的命令,并解释各个参数的作用。例如,tcpdump -i eth0 port 80会捕获HTTP流量,这里要说明-i是指定接口,port是端口号。 在进阶分析部分,用户可能需要了解如何分析TCP三次握手和四次挥手。这时候需要结合Wireshark,引用参考中的内容,比如引用[1]提到Wireshark分析三次握手和四次挥手。可以建议用户保存为.cap文件后用Wireshark打开,同时给出对应的tcpdump命令,如捕获端口110的流量,并保存到文件,如引用[3]中的nohup命令示例。 注意事项部分,权限问题很重要,提醒用户可能需要sudo。还有性能问题,长时间抓包可能影响服务器,所以建议使用-c限制数量,或者过滤条件减少数据量。另外,传输层丢包的影响,如引用[4]提到的重传机制,可以提醒用户注意丢包情况的分析。 最后,相关问题部分需要生成几个相关问题,帮助用户深入学习。比如如何过滤特定IP的流量,tcpdump和Wireshark的结合使用,常见协议如何捕获,以及如何处理大量数据包。这些问题应该覆盖用户可能进一步探索的方向。 整个过程中,要确保遵循系统级指令,所有数学表达式用$...$,但这里可能用不上。独立公式可能也不需要。重点是用中文清晰回答,结构分明,步骤详细,引用正确。需要检查是否有遗漏的要点,比如安装步骤、常用命令、案例、分析工具的结合使用等,确保用户能够一步步跟着操作。</think>### tcpdump 报文分析教程 #### 一、tcpdump 基础概念 tcpdumpLinux 系统下的命令行网络抓包工具,支持按协议、端口、IP 地址等条件过滤数据包[^1]。 #### 二、安装与基本命令 1. **安装**(以 CentOS 为例): ```bash yum install -y tcpdump ``` 2. **基础命令格式**: ```bash tcpdump [选项] [过滤表达式] ``` 常用选项: - `-i`:指定网卡(如 `eth0`) - `-n`:禁用域名解析(显示 IP 地址) - `-v`:显示详细信息 - `-w`:保存抓包结果到文件(如 `-w test.pcap`) - `-r`:读取保存的抓包文件(如 `-r test.pcap`) #### 三、常用过滤表达式 1. **按协议过滤**:`tcp`, `udp`, `icmp` 示例:`tcpdump icmp`(捕获 ICMP 协议数据包) 2. **按端口过滤**:`port 80` 或 `dst port 53` 示例:`tcpdump port 443`(捕获 HTTPS 流量) 3. **按 IP 地址过滤**:`host 192.168.1.1` 或 `src 10.0.0.5` 示例:`tcpdump host 8.8.8.8`(捕获与 Google DNS 的通信) 4. **组合条件**:`and`/`or` 示例:`tcpdump tcp and port 22`(捕获 SSH 流量) #### 四、实际案例分析 1. **抓取 HTTP 流量**: ```bash tcpdump -i eth0 port 80 -n -v ``` - `-i eth0`:监听网卡 eth0 - `port 80`:过滤 HTTP 流量 - `-n`:显示 IP 而非域名 2. **抓取 DNS 请求**(参考引用[2]): ```bash tcpdump -i eth0 port 53 -w dns.pcap ``` 保存文件后可用 Wireshark 分析 DNS 的 A 记录响应。 3. **抓取特定主机的 ICMP 包**: ```bash tcpdump icmp and host 192.168.1.100 ``` #### 五、进阶分析(结合 Wireshark) 1. **保存抓包文件**: ```bash tcpdump -i eth1 port 110 -w /tmp/mail.cap ``` 使用 `nohup` 可后台运行(参考引用[3])。 2. **分析 TCP 握手与挥手**(参考引用[1]): - 将 `.cap` 文件导入 Wireshark,筛选 `tcp.flags.syn==1` 和 `tcp.flags.fin==1` 观察三次握手和四次挥手。 #### 六、注意事项 1. **权限问题**:抓包需 root 权限,建议使用 `sudo`。 2. **性能影响**:长时间抓包可能占用资源,可通过 `-c 100` 限制抓包数量。 3. **传输层丢包分析**:若出现重传(`tcp.analysis.retransmission`),需排查网络稳定性(参考引用[4])。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值