tcpdump抓包与Wireshark分析

1.tcpdump与Wireshark介绍
1.1tcpdump

在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大。它是基于Unix系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包。
默认情况下,tcpdump不会抓取本机内部通讯的报文。根据网络协议栈的规定,对于报文,即使是目的地是本机,也需要经过本机的网络协议层,所以本机通讯肯定是通过API进入了内核,并且完成了路由选择。【比如本机的TCP通信,也必须要socket通信的基本要素:src ip port dst ip port】
如果要使用tcpdump抓取其他主机MAC地址的数据包,必须开启网卡混杂模式,所谓混杂模式,用最简单的语言就是让网卡抓取任何经过它的数据包,不管这个数据包是不是发给它或者是它发出的。一般而言,Unix不会让普通用户设置混杂模式,因为这样可以看到别人的信息,比如telnet的用户名和密码,这样会引起一些安全上的问题,所以只有root用户可以开启混杂模式,开启混杂模式的命令是:ifconfig en0 promisc, en0是你要打开混杂模式的网卡。
Linux抓包原理:
Linux抓包是通过注册一种虚拟的底层网络协议来完成对网络报文(准确的说是网络设备)消息的处理权。当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,例如以太网协议、x25协议处理模块来尝试进行报文的解析处理,这一点和一些文件系统的挂载相似,就是让系统中所有的已经注册的文件系统来进行尝试挂载,如果哪一个认为自己可以处理,那么就完成挂载。
当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会给这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该模块就会趁机对报文进行窥探,也就是把这个报文完完整整的复制一份,假装是自己接收到的报文,汇报给抓包模块。

1.2Wireshark
Wireshark是一个网络协议检测工具,支持Windows平台、Unix平台、Mac平台,一般只在图形界面平台下使用Wireshark,如果是Linux的话,直接使用tcpdump了,因为一般而言Linux都自带的tcpdump,或者用tcpdump抓包以后用Wireshark打开分析。
在Mac平台下,Wireshark通过WinPcap进行抓包,封装的很好,使用起来很方便,可以很容易的制定抓包过滤器或者显示过滤器,具体简单使用下面会介绍。Wireshark是一个免费的工具,只要google一下就能很容易找到下载的地方。
所以,tcpdump是用来抓取数据非常方便,Wireshark则是用于分析抓取到的数据比较方便。
2.tcpdump使用

2.1 语法
tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
        [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
        [ -i interface ] [ -m module ] [ -M secret ]
        [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
        [ -W filecount ]
        [ -E spi@ipaddr algo:secret,...  ]
        [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
        [ expression ]
类型的关键字

host(缺省类型): 指明一台主机,如:host 210.27.48.2

net: 指明一个网络地址,如:net 202.0.0.0

port: 指明端口号,如:port 23

确定方向的关键字

src: src 210.27.48.2, IP包源地址是210.27.48.2

dst: dst net 202.0.0.0, 目标网络地址是202.0.0.0

dst or src(缺省值)

dst and src

协议的关键字:缺省值是监听所有协议的信息包

fddi

ip

arp

rarp

tcp

udp

其他关键字

gateway

broadcast

less

greater

常用表达式:多条件时可以用括号,但是要用\转义

非 : ! or "not" (去掉双引号)

且 : && or "and"

或 : || or "or"

2.2 选项
-A:以ASCII编码打印每个报文(不包括链路层的头),这对分析网页来说很方便;
-a:将网络地址和广播地址转变成名字; 
-c<数据包数目>:在收到指定的包的数目后,tcpdump就会停止;
-C:用于判断用 -w 选项将报文写入的文件的大小是否超过这个值,如果超过了就新建文件(文件名后缀是1、2、3依次增加);
-d:将匹配信息包的代码以人们能够理解的汇编格式给出; 
-dd:将匹配信息包的代码以c语言程序段的格式给出; 
-ddd:将匹配信息包的代码以十进制的形式给出;
-D:列出当前主机的所有网卡编号和名称,可以用于选项 -i;
-e:在输出行打印出数据链路层的头部信息; 
-f:将外部的Internet地址以数字的形式打印出来; 
-F<表达文件>:从指定的文件中读取表达式,忽略其它的表达式; 
-i<网络界面>:监听主机的该网卡上的数据流,如果没有指定,就会使用最小网卡编号的网卡(在选项-D可知道,但是不包括环路接口),linux 2.2 内核及之后的版本支持 any 网卡,用于指代任意网卡; 
-l:如果没有使用 -w 选项,就可以将报文打印到 标准输出终端(此时这是默认); 
-n:显示ip,而不是主机名; 
-N:不列出域名; 
-O:不将数据包编码最佳化; 
-p:不让网络界面进入混杂模式; 
-q:快速输出,仅列出少数的传输协议信息; 
-r<数据包文件>:从指定的文件中读取包(这些包一般通过-w选项产生); 
-s<数据包大小>:指定抓包显示一行的宽度,-s0表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,但一般ethernet MTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失; 
-S:用绝对而非相对数值列出TCP关联数; 
-t:在输出的每一行不打印时间戳; 
-tt:在输出的每一行显示未经格式化的时间戳记; 
-T<数据包类型>:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议); 
-v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; 
-vv:输出详细的报文信息; 
-x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册; 
-w<数据包文件>:直接将包写入文件中,并不分析和打印出来;
expression:用于筛选的逻辑表达式;
2.3 命令实践##
直接启动tcpdump,将抓取所有经过第一个网络接口上的数据包
tcpdump
控制台输出:

tcpdump: WARNING: eth0: no IPv4 address assigned

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

15:36:18.806314 IP bogon.26 > bogon.61681: Flags [P.], seq 1872349141:1872349385, ack 1531137621, win 252, length 244

15:36:18.806566 IP bogon.43893 > jtbjdc001.home.******.com.domain: 46527+ PTR? 37.36.200.10.in-addr.arpa. (43)

15:36:18.806893 IP jtbjdc001.home.******.com.domain > bogon.43893: 46527 1/0/0 PTR bogon. (62)

15:36:18.806968 IP bogon.40634 > jtbjdc001.home.******.com.domain: 52587+ PTR? 91.12.151.10.in-addr.arpa. (43)

15:36:18.807270 IP jtbjdc001.home.******.com.domain > bogon.40634: 52587 1/0/0 PTR bogon. (62)

15:36:18.807345 IP bogon.58342 > jtbjdc001.home.******.com.domain: 49094+ PTR? 11.1.150.10.in-addr.arpa. (42)

15:36:18.807374 IP bogon.26 > bogon.61681: Flags [P.], seq 244:408, ack 1, win 252, length 164

15:36:18.807641 IP jtbjdc001.home.******.com.domain > bogon.58342: 49094* 1/0/0 PTR jtbjdc001.home.******.com. (83)

15:36:18.807692 IP bogon.46970 > jtbjdc001.home.******.com.domain: 17599+ PTR? 90.12.151.10.in-addr.arpa. (43)

15:36:18.807994 IP jtbjdc001.home.******.com.domain > bogon.46970: 17599 1/0/0 PTR bogon. (62)

15:36:18.808099 IP bogon.26 > bogon.61681: Flags [P.], seq 408:1420, ack 1, win 252, length 1012

15:36:18.808131 IP bogon.26 > bogon.61681: Flags [P.], seq 1420:1568, ack 1, win 252, length 148

15:36:18.808200 IP bogon.26 > bogon.61681: Flags [P.], seq 1568:1716, ack 1, win 252, length 148

15:36:18.808241 IP bogon.26 > bogon.61681: Flags [P.], seq 1716:1864, ack 1, win 252, length 148

15:36:18.808347 IP bogon.26 > bogon.61681: Flags [P.], seq 1864:2012, ack 1, win 252, length 148

抓取所有经过指定网络接口上的数据包
tcpdump -i eth0
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。
控制台输出:

tcpdump: WARNING: eth0: no IPv4 address assigned

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

15:41:30.230320 IP bogon.26 > bogon.61681: Flags [P.], seq 1874716549:1874716793, ack 1531139153, win 252, length 244

15:41:30.230570 IP bogon.51968 > jtbjdc001.home.******.com.domain: 24716+ PTR? 37.36.200.10.in-addr.arpa. (43)

15:41:30.230905 IP jtbjdc001.home.******.com.domain > bogon.51968: 24716 1/0/0 PTR bogon. (62)

15:41:30.230982 IP bogon.47049 > jtbjdc001.home.******.com.domain: 21078+ PTR? 91.12.151.10.in-addr.arpa. (43)

15:41:30.231304 IP jtbjdc001.home.******.com.domain > bogon.47049: 21078 1/0/0 PTR bogon. (62)

15:41:30.231379 IP bogon.48906 > jtbjdc001.home.******.com.domain: 53621+ PTR? 11.1.150.10.in-addr.arpa. (42)

15:41:30.231408 IP bogon.26 > bogon.61681: Flags [P.], seq 244:408, ack 1, win 252, length 164

15:41:30.231673 IP jtbjdc001.home.******.com.domain > bogon.48906: 53621* 1/0/0 PTR jtbjdc001.home.******.com. (83)

15:41:30.231723 IP bogon.53129 > jtbjdc001.home.******.com.domain: 28967+ PTR? 90.12.151.10.in-addr.arpa. (43)

15:41:30.231996 IP jtbjdc001.home.******.com.domain > bogon.53129: 28967 1/0/0 PTR bogon. (62)

15:41:30.232101 IP bogon.26 > bogon.61681: Flags [P.], seq 408:1420, ack 1, win 252, length 1012

15:41:30.232133 IP bogon.26 > bogon.61681: Flags [P.], seq 1420:1568, ack 1, win 252, length 148

15:41:30.232202 IP bogon.26 > bogon.61681: Flags [P.], seq 1568:1716, ack 1, win 252, length 148

15:41:30.232243 IP bogon.26 > bogon.61681: Flags [P.], seq 1716:1864, ack 1, win 252, length 148

15:41:30.232351 IP bogon.26 > bogon.61681: Flags [P.], seq 1864:2012, ack 1, win 252, length 148

15:41:30.232399 IP bogon.26 > bogon.61681: Flags [P.], seq 2012:2160, ack 1, win 252, length 148

抓取所有经过 eth0,目的或源地址是 10.151.12.90 的网络数据:
tcpdump -i eth0 host 10.151.12.90 
抓取主机10.37.63.255和主机10.37.63.61或10.37.63.95的通信:
tcpdump host 10.37.63.255 and \(10.37.63.61 or 10.37.63.95 \)
抓取主机192.168.13.210除了和主机10.37.63.61之外所有主机通信的数据包:
tcpdump -n host 10.37.63.255 and ! 10.37.63.61
抓取主机10.37.63.255除了和主机10.37.63.61之外所有主机通信的ip包
tcpdump ip -n host 10.37.63.255 and ! 10.37.63.61
抓取主机10.37.63.3发送的所有数据:
tcpdump -i en0 src host 10.37.63.3 (注意数据流向)
抓取主机10.37.63.3接收的所有数据:
tcpdump -i en0 dst host 10.37.63.3 (注意数据流向) 
抓取主机10.37.63.3所有在TCP 80端口的数据包:
tcpdump -i en0 host 10.37.63.3 and tcp port 80

2.4 抓个网站练练
想抓取访问某个网站时的网络数据。比如网站 http://www.baidu.com/ 怎么做?
通过tcpdump截获主机www.baidu.com发送与接收所有的数据包
tcpdump -i en0 host www.baidu.com
想要看到详细的http报文。怎么做?
tcpdump -A -i en0 host www.baidu.com
将抓取的结果存到文件,比如文件 file1
tcpdump -A -i en0 -w file1 host www.baidu.com
如何读取这个文件的基本信息
tcpdump -r file1
分析抓取到的报文
16:50:11.916308 IP 10.37.63.3.52346 > 61.135.169.121.http: Flags [P.], seq 1888894293:1888894434, ack 2526934942, win 8192, length 141: HTTP: GET / HTTP/1.1

第一列是时间戳:时、分、秒、微秒

第二列是网际网路协议的名称

第三列是报文发送方的十进制的网际网路协议地址,以及紧跟其后的端口号(偶尔会是某个协议名如 http ,如果在此处仍然显示端口号加上 -n 选项)

第四列是大于号

第五列是报文接收方的十进制的网际网路协议地址,以及紧跟其后的端口号(偶尔会是某个协议名如 http ,如果在此处仍然显示端口号加上 -n 选项)

第六列是冒号

第七列是 Flags 标识,可能的取值是 [S.] [.] [P.] [F.]

第八、九、十……列 是tcp协议报文头的一些变量值:

seq 是 请求同步的 序列号

ack 是 已经同步的 序列号

win 是 当前可用窗口大小

length 是 tcp协议报文体的长度

如果加入了-S选项,会看到的 seq, ack 是 两个冒号分割的值,分别表示变更前、后的值。

3.Wireshark分析tcpdump抓包结果
使用Wireshark打开tcpdump抓包文件

具体报文内容还需对照协议分析。

作者:书海陶然
链接:https://www.jianshu.com/p/a62ed1bb5b20
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

<think>首先,用户的问题是:“我想学习使用Wireshark分析TCPDump文件的技巧 请问Wireshark 分析 TCPDump 文件的使用技巧”。这基于之前的引用内容,涉及WiresharkTcpdump。 系统级指令: - 所有行内数学表达式必须使用$...$格式。但在这个问题中,可能没有数学表达式,所以我不需要添加任何数学内容。 - 独立公式必须使用$$...$$格式并单独成段。同样,可能不适用。 - LaTeX语法正确:确保任何LaTeX都正确。 - 使用中文回答:整个回答要用中文。 - 生成相关问题:在回答结束后,生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识:例如[^1]。参考提供的引用,我需要引用[^1]、[^2]、[^3]、[^4]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠:基于提供的引用。 提供的引用: - 引用[1]:关于Linux中的网络协议分析WiresharkTcpdump的使用。 - 引用[2]:网络故障处理及分析工具:WiresharkTcpdump集成。 - 引用[3]:Tcpdump抓包Wireshark报文分析,包括TCP三次握手和四次挥手。 - 引用[4]:运维之网络安全抓包——WireSharktcpdump,包括一些命令行选项。 用户的问题具体是关于使用Wireshark分析Tcpdump文件的技巧。所以,我需要聚焦在如何用Wireshark打开和分析tcpdump捕获的文件。 关键点: - tcpdump捕获的数据包可以保存为文件,通常是.pcap格式。 - Wireshark可以读取这些文件进行分析。 - 技巧包括:如何打开文件、过滤数据、分析特定协议等。 结构化回答: 1. **介绍**:简要解释WiresharkTcpdump的集成。 2. **步骤**:逐步指导如何分析Tcpdump文件。 3. **技巧和最佳实践**:提供具体技巧。 4. **引用**:在相关部分添加引用标识。 5. **相关问题**:在结束时生成相关问题。 生成相关问题: - 基于用户查询,生成3个左右相关问题。 确保回答真实可靠:使用提供的引用信息。例如: - 引用[2]提到:将tcpdump捕获Wireshark分析结合。 - 引用[3]讨论:Tcpdump抓包Wireshark分析,包括TCP握手。 - 引用[4]给出tcpdump命令选项。 回答大纲: 1. **开头**:解释Wireshark如何分析Tcpdump文件。 2. **步骤详解**: - 如何捕获数据包用tcpdump并保存为文件。 - 如何在Wireshark中打开该文件。 - 使用Wireshark分析功能:过滤、统计、协议分析等。 3. **具体技巧**: - 过滤数据包。 - 分析TCP连接(如三次握手)。 - 使用高级特性。 4. **引用**:在描述时添加引用标识。 5. **结尾**:总结。 6. **相关问题**。 用中文写回答。 最终输出格式: - 回答部分。 - §§相关问题§§ - 相关问题列表。</think>### Wireshark 分析 Tcpdump 文件的使用技巧 Wireshark 是一款强大的网络协议分析工具,它可以读取由 Tcpdump 捕获的数据包文件(通常为 `.pcap` 或 `.pcapng` 格式),并提供图形化界面进行深度分析。这种结合方式在网络故障排查、安全审计和性能优化中非常高效,尤其当您无法直接在目标系统上运行 Wireshark 时,Tcpdump 的轻量级捕获功能就显得尤为重要[^2]。下面我将逐步介绍使用技巧,确保您能高效分析 Tcpdump 文件。技巧基于真实实践,并参考了相关文档。 #### 步骤 1: 准备工作 – 捕获并保存 Tcpdump 文件 在分析前,您需要先使用 Tcpdump 捕获网络流量并保存为文件。Tcpdump 是命令行工具,适合在服务器或嵌入式设备上运行。以下是一个基本命令示例: ```bash tcpdump -i eth0 -w capture.pcap port 80 ``` - **技巧**: - 使用 `-w` 选项指定输出文件名(如 `capture.pcap`),确保文件格式兼容 Wireshark。 - 添加过滤条件(如 `port 80`)只捕获 HTTP 流量,减少文件大小和分析负担[^4]。 - 如果文件过大,用 `-c count` 限制数据包数量(如 `-c 1000` 只抓 1000 个包),避免 Wireshark 加载缓慢[^4]。 #### 步骤 2: 在 Wireshark 中打开 Tcpdump 文件 打开 Wireshark,选择 "File" > "Open",然后浏览到您的 `.pcap` 文件。Wireshark 会自动加载并解析数据包。 - **技巧**: - **快速加载大文件**:如果文件很大(如超过 100MB),启用 "Use ring buffer" 选项(在捕获设置中),或使用 Wireshark 的 "Import from Hex Dump" 功能处理部分数据[^2]。 - **文件兼容性**:Tcpdump 生成的文件通常兼容 Wireshark,但如果遇到错误,检查文件头是否损坏。您可以用 `tcpdump -r capture.pcap` 验证文件完整性[^3]。 #### 步骤 3: 分析数据包的核心技巧 Wireshark 提供了丰富的分析功能。以下是关键技巧: - **过滤数据包**: - 在过滤栏输入表达式,如 `tcp.port == 80` 只看 HTTP 流量,或 `ip.src == 192.168.1.1` 过滤特定源 IP。这能快速定位问题,减少干扰[^1]。 - 高级技巧:使用组合过滤,如 `tcp.flags.syn == 1 and tcp.flags.ack == 0` 查找 TCP SYN 包(三次握手的第一步),便于诊断连接问题[^3]。 - **协议和流分析**: - **TCP 连接分析**:右键点击任意 TCP 包,选择 "Follow" > "TCP Stream",查看完整会话(如 HTTP 请求/响应)。这对于分析三次握手和四次挥手特别有用,Wireshark 会用颜色高亮 SYN、ACK、FIN 包[^3]。 - **统计工具**:使用 "Statistics" 菜单下的功能: - "Protocol Hierarchy" 查看各协议占比,快速识别异常流量。 - "Conversations" 分析主机间通信,检测带宽滥用或攻击[^1]。 - **解码和诊断**: - 如果 Tcpdump 文件包含加密流量(如 HTTPS),Wireshark 可能无法直接解码。技巧:导入服务器密钥(通过 "Edit" > "Preferences" > "Protocols" > "TLS"),但需注意安全权限[^2]。 - 对于性能问题,用 "IO Graphs"(在 "Statistics" 下)绘制流量图,检查延迟或丢包。例如,设置 Y 轴为 "Bytes/tick" 监控带宽峰值[^1]。 #### 步骤 4: 高级优化和问题排查 - **保存和导出**:分析后,导出特定数据包(选择包后 "Export Specified Packets"),或保存过滤结果为新文件。这方便共享报告。 - **集成 Tcpdump 选项**:Tcpdump 的某些捕获选项(如 `-s snaplen` 设置抓包长度)影响 Wireshark 分析。技巧:捕获时用 `-s 0` 抓完整包,避免截断[^4]。 - **常见错误处理**:如果 Wireshark 显示 "Malformed Packet",可能是 Tcpdump 捕获时丢包。解决:在 Tcpdump 命令中添加 `-B buffer_size` 增加缓冲区(如 `-B 4096`)[^4]。 #### 总结 通过 Wireshark 分析 Tcpdump 文件,您能结合命令行捕获的灵活性和图形化分析的深度。关键技巧包括高效过滤、流跟踪和统计工具的使用,这些方法在网络故障排查中能显著提升效率[^2][^3]。记住,实践是掌握的关键 – 尝试分析真实捕获文件(如引用中提到的 HTTP 流量示例)[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值