02 | 抓包分析技术初探:你会用tcpdump和Wireshark吗?
该思维导图由 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-17433 - 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-2712 - yayiyaya1. 抓取 TCP SYN 包: tcpdump 'tcp[13] = 2' -w file.pcap 2. tcpdump -s 34 -w file.pcap
作者回复: 赞:)可见你是真的去操作了的,非常好
2022-01-1410 - Dextertcpdump -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-055 - 远方的风请教个问题,我们用java写了一个展示图片的http接口,通过nginx转发,但是偶现图片展示不了nginx发送0字节的情况,请问这种如何排查?
作者回复: 您好。确实是很典型的问题,我称之为“偶发性问题”。在第18课,我们会深入探讨这个话题,请耐心等待:)
2022-01-1463 - 谦逊的禾苗太难了 我以为我有基础,发觉我这是0
作者回复: 哈哈,tcpdump和wireshark都是工具,工具是给人服务的,不会太难的。你可以先安装一下wireshark,用tcpdump抓几个包,然后用wireshark打开看看。通过wireshark来“可视化”的学习网络知识是一条捷径!一般人我不告诉他:)
2022-06-272 - Geek_4996c9tcp[tcpflags] 这个tcpflags是指啥 固定语法格式吗?
作者回复: tcpflags就是SYN, RST, ACK, FIN,PSH等TCP标志位,每个TCP报文都会带至少一个标志位,经常是两到三个,比如ACK+PSH是最常见的,挥手阶段FIN+ACK也常见。你可以通过tcp[tcpflags] 过滤出符合条件的报文~
2022-04-102 - D⃰a⃰b⃰i⃰n⃰g⃰tcpdump这个软件百度下载吗,不会操作
作者回复: tcpdump在Linux服务器上用,一般是系统默认自带的。如果是windows上,可以直接安装wireshark,它本身就可以抓包(当然更可以分析包)。
2022-01-1752 - includestdio.h问题已经有人回答了,那我就问个小问题吧哈哈,想问下老师文章里的libcap和bpf 关系图老师是用什么做的
作者回复: 您好,图是我用google doc里面自带的插件画的,这个插件不能算最好用,但也满足基本需求了:)
2022-01-1622 - 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