网络排查案例课
杨胜辉
eBay 资深运维专家,流量系统负责人
22781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
实战三:不用抓包就能做的网络排查篇 (2讲)
网络排查案例课
15
15
1.0x
00:00/00:00
登录|注册

02 | 抓包分析技术初探:你会用tcpdump和Wireshark吗?

-v 打印详细信息
-n 不做地址转换
-s 抓取报文长度
-c 抓取固定数量
-w 保存到文件
乱序对传输的影响
cut short提示不是大问题
图形界面提示
利用IP的TTL属性判断
-r 参数读取文件
-X 参数展示TCP数据
预定义的过滤器
使用偏移量技术
常见参数
包含更多特性
支持多网络接口抓包
可能含有非libpcap标准数据
包含报文数据和元信息
libpcap格式
更通用的内核接口
libpcap的Windows版本
BPF的API封装
高效稳定的报文过滤
从Ethereal更名而来
由Gerald Combs发布
BPF作为底层基础
由劳伦斯伯克利国家实验室开发
可以直接抓包和分析
原名Ethereal
开源网络分析软件
依赖libpcap和BPF
Unix类操作系统工具
抓包分析在网络排查中的重要性
tcpdump和Wireshark的使用技巧
抓包工具的历史和工作机理
2. 在IP层问题排查中节约抓包文件大小
1. 使用偏移量方法抓取TCP SYN包
功能相对老旧
抓取报文与进程关系
乱序现象
抓包文件问题
定位应用层请求和响应
抓包文件来源
读取抓包文件
显示报文内容
过滤报文
抓取报文
pcapng
cap
pcap
eBPF (extended BPF)
WinPcap
libpcap
BPF (Berkeley Packet Filter)
Wireshark
tcpdump
Wireshark
tcpdump
小结
思考题
Windows Network Monitor
Wireshark使用
tcpdump使用
抓包文件类型
抓包技术名词
抓包工具历史
核心工具
抓包分析技术初探

该思维导图由 AI 生成,仅供参考

你好,我是胜辉。
咱们这门课最核心的内容,恐怕就是抓包分析了。在众多的排查技术中,抓包分析可以说是“皇冠上的明珠”,也是包括我自己在内的很多人一直努力的方向。所以,tcpdump 和 Wireshark 这两个工具在工程师心目中的位置,自然不用我多提了。相信你能来上这门课,也很大程度上是想把这两个工具好好学一下的。
不过,你了解这两个工具的过去吗?它们最初是怎么出现的,又是什么样的机制使得它们如此强大呢?
这节课,我就带你走进抓包分析技术大家庭。你会从中了解到抓包分析技术的光荣历史和渊源,以及通过实际的例子,感受到它的精妙设计和强大能力。当你理解了 tcpdump 和 Wireshark 的初步用法之后,你对常见的抓包需求场景也就能心里有数,知道大概从哪里下手了。

这些抓包技术名词,你分清楚了吗?

首先,我帮你捋一下这些技术的来龙去脉甚至“八卦”,这样你在进入后面课程的具体技术学习时,就会多几分亲近感,也多几分底气了。
tcpdump
我们先来认识大名鼎鼎的 tcpdump。1988 年,劳伦斯伯克利国家实验室的四位工程师编写出了 tcpdump 这个殿堂级的工具。这个实验室呢,也很值得我们尊敬。这里涌现过13 位诺贝尔奖获得者,其中包括 1997 年获得物理学奖的华人巨匠朱棣文,可见这是多么耀眼的一块科学圣地。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了网络工程师必备的抓包工具tcpdump和Wireshark的重要性,以及它们的发展历程和原理。文章首先介绍了tcpdump依赖于BPF(Berkeley Packet Filter)来过滤报文的重要性,以及BPF的发展历程和原理。接着详细介绍了抓包文件的多种类型,包括pcap、cap和pcapng,以及它们的特性。此外,还介绍了tcpdump的基本用法、如何抓取报文、过滤报文、显示报文内容、读取抓包文件、过滤后转存以及延长抓包时间的方法。随后,文章介绍了tcptrace这一工具的作用和价值,以及它在分析抓包文件时的优势。最后,文章详细介绍了Wireshark的历史渊源和使用方法,以及Wireshark与tcpdump的比较优势。整体而言,本文为读者提供了对抓包分析技术的深入了解,以及实用的技巧和方法,对于网络工程师和对网络分析感兴趣的读者具有很高的参考价值。文章还介绍了Wireshark的一些使用技巧,如如何确定抓包文件的抓取端、定位应用层请求和返回的报文、处理报文截断问题以及乱序报文的影响。此外,还提到了Windows平台上的抓包工具Network Monitor。总的来说,本文内容丰富,涵盖了抓包工具的基本原理和使用技巧,对读者进行了全面的指导和启发。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《网络排查案例课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • 江山如画
    问题1: 通过偏移量方法抓取 SYN 包:tcpdump -i any 'tcp[13]&2 !=0' 通过标志位方法抓取 SYN 包:tcpdump -i any 'tcp[tcpflags]&tcp-syn !=0' 问题2: tcpdump -i eth0 -s 34 老师对于问题2有个疑问,我最开始用的命令是"tcpdump -i any -s 34",发现 -s 写成 34 抓不到网络层的目的地址字段,用 wireshark 分析发现帧头(不知道还叫不叫这个,wireshark 显示为 Linux cooked capture v1)占了 16 个字节,写成 36 就能把信息抓全了,但是写成"tcpdump -i eth0 -s 34" 就可以抓全

    作者回复: 这是因为tcpdump在做-i any时,把以太网头部模拟为这个linux cooked capture的特定格式了,它占用了16个字节,而普通以太网头部是14字节。因为它多占用了2个字节,所以dest IP的最后2个字节也丢失了,以至于tcpdump或Wireshark都读不出dest IP。就像你说的,-i any 时候,长度指定为36就可以把dest IP也抓到了。你的发现很棒!

    2022-01-17
    4
    33
  • Realm
    补充一点基础知识,tcp的标志位在第13字节(具体可以看tcp header报文) 当我们只想过滤仅有SYN标志的包时,第14个字节的二进制是00000010,十进制是2 # tcpdump -i eth1 'tcp[13] = 2' 匹配SYN+ACK包时(二进制是00010010或是十进制18) # tcpdump -i eth1 'tcp[13] = 18' 匹配SYN或是SYN+ACK的数据时 # tcpdump -i eth1 'tcp[13] & 2 = 2'

    作者回复: 感谢你的补充:)了解各层头部结构,对我们写抓包过滤器,或者报文分析时候都很有用。 具体的TCP头部结构,大家可以直接看RFC793:https://datatracker.ietf.org/doc/html/rfc793#section-3.1

    2022-01-27
    12
  • yayiyaya
    1. 抓取 TCP SYN 包: tcpdump 'tcp[13] = 2' -w file.pcap 2. tcpdump -s 34 -w file.pcap

    作者回复: 赞:)可见你是真的去操作了的,非常好

    2022-01-14
    10
  • Dexter
    tcpdump -i any -n 'tcp[tcpflags]&(tcp-rst) !=0' 。 请问一下tcp[tcpflags]&(tcp-rst) 这中间的&表示的是按位与吗?

    作者回复: 是的。tcp-rst指的是0x004,通过把这个报文的tcp flag部分跟0x004进行按位与(也就是都为1才得1,其他都是得0),可以得到一个数值,如果这个值不等于零,就意味这个报文在reset标志位上就是1,也就是RST报文。

    2022-02-05
    5
  • 远方的风
    请教个问题,我们用java写了一个展示图片的http接口,通过nginx转发,但是偶现图片展示不了nginx发送0字节的情况,请问这种如何排查?

    作者回复: 您好。确实是很典型的问题,我称之为“偶发性问题”。在第18课,我们会深入探讨这个话题,请耐心等待:)

    2022-01-14
    6
    3
  • 谦逊的禾苗
    太难了 我以为我有基础,发觉我这是0

    作者回复: 哈哈,tcpdump和wireshark都是工具,工具是给人服务的,不会太难的。你可以先安装一下wireshark,用tcpdump抓几个包,然后用wireshark打开看看。通过wireshark来“可视化”的学习网络知识是一条捷径!一般人我不告诉他:)

    2022-06-27
    2
  • Geek_4996c9
    tcp[tcpflags] 这个tcpflags是指啥 固定语法格式吗?

    作者回复: tcpflags就是SYN, RST, ACK, FIN,PSH等TCP标志位,每个TCP报文都会带至少一个标志位,经常是两到三个,比如ACK+PSH是最常见的,挥手阶段FIN+ACK也常见。你可以通过tcp[tcpflags] 过滤出符合条件的报文~

    2022-04-10
    2
  • D⃰a⃰b⃰i⃰n⃰g⃰
    tcpdump这个软件百度下载吗,不会操作

    作者回复: tcpdump在Linux服务器上用,一般是系统默认自带的。如果是windows上,可以直接安装wireshark,它本身就可以抓包(当然更可以分析包)。

    2022-01-17
    5
    2
  • includestdio.h
    问题已经有人回答了,那我就问个小问题吧哈哈,想问下老师文章里的libcap和bpf 关系图老师是用什么做的

    作者回复: 您好,图是我用google doc里面自带的插件画的,这个插件不能算最好用,但也满足基本需求了:)

    2022-01-16
    2
    2
  • Geek_601e15
    老师哪里有说明报文中哪个字段是0x..... 就代表syn,或者tls吗?

    作者回复: 这是一个很好的问题。我们分层来看一下: 1. 在数据链路层(二层)头部里,帧格式中就有一项Type字段定义了上层协议类型(是IPv4还是其他)。比如0x0800表示IPv4。 2. 在网络层(三层)头部里,分组(报文)格式中也有Protocol字段定义了上层协议类型(TCP,还是UDP,还是其他)。比如0x06表示上层是TCP。 3. 在TCP这一层的头部里,并没有一个字段声明其上层协议。这是为什么呢?因为到这里再往上,完全就是各种各样的实现了,比如你也可以自己定义一个应用层协议,也完全被TCP/IP所支持。因此也没有必要预留一个字段给上层协议类型。就TLS而言,你可以把它当做跟其他应用层一样的东西,只要TLS协议两端互相认识就可以了。当然,由于TLS是广泛使用的协议,wireshark是可以识别和分析这个协议的。 如果你打开一个TLS抓包文件,在wireshark里查看TLS这一层的二进制信息,会发现它们是以0x160301或者0x160303等数值开头的。这就是TLS的头部,声明了自己的协议版本。比如: 0x0301是TLS1.0 0x0303是TLS1.2 当然,TLS还分握手协议和记录协议,继续研究的话还能发现很多细节,这里就略过了,总之大体是这个情况。 你的思考很深入,不同于多数人只是想掌握知识从而运用,而你还想知道为什么知识是这个样子的,背后的原因是什么。赞!

    2023-08-05归属地:河北
    1
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部