Linux tcpdump抓包必备知识

@author: 放牛娃学编程 @moto: 分享与热爱,不是大爱我不说 @放牛娃每日一语: 除了你自己,没有人可以说你不行

别急着划开,这篇笔记一定能够给你带来收获

因为这里你能学到AI永远也给不了你的知识

Linux tcpdump抓包必备知识

经常听到大佬说,那就抓包排查啊,Linux抓包?听着好高大上啊,其实一点都不高大上,就是一条命令的事情,下面教你成为别人眼中的大佬

一、这才是你该有的思维

二话不多说,我们先测一下,如果下面命令你能不加思索的说出各个参数啥意思,那你不用继续往下看了,因为我相信你是超级牛人(哈哈哈,反正我是记不住)

代码语言:javascript
复制
tcpdump -i ens33 -tttt -nn -A -l dst host 172.19.88.100 and port 9898 | grep -C 30 'abc'

看不懂,别怕,因为这个压根不用你记住,掌握好下面说的思维,你一样可以写出上面看似高大上的命令

之前的文章我就说过很多次这个思想,一个产品的诞生,它想要推广,必然就有配套的使用文档说明,如果没有它那怎么推广出去?而想要学习这个产品的唯一途径就是先看它的使用文档,只是很多人都都不习惯看官方文档罢了,殊不知这才是你学习新技术给你指导最权威的地方

  • 文档先行 地址:https://www.tcpdump.org/manpages/tcpdump.1-4.9.2.html 语法中expression地址:https://www.tcpdump.org/manpages/pcap-filter.7.html

官方文档对各个参数都做了详细的解释,完全不建议放牛娃们死记硬背,需要的时候直接查一下就可了

  • 我画的tcpdump语法简图(也是从官方文档学习的啦)
  • 看官网给的例子

二、实战必备命令

很多小伙伴问,tcpdump命令的官方文档,我访问不了,这是你不学习的理由么?访问不了我之前不是教过你其它命令么?实在不行你不会找我要离线的pdf文档啊

1. 查看文档命令(必须要懂的命令)

代码语言:javascript
复制
# 查看用法
tcpdump --help
​
# 具体参数解释手册
man tcpdump
​
# [expression]表达式手册 具体是否是pcap-filter,请查看man tcpdump 关于expression部分的描述
man pcap-filter

下面命令 网卡名称用ens33举例,ip用172.16.xx.xx举例,端口用9898举例

再提一遍,下面对应命令的参数,千万不要死记硬背,需要的时候快速查阅文档即可,如果你实在懒,那你就收藏这份文章,以后你一定会用的到

2. 过滤指定网卡的数据包

代码语言:javascript
复制
# 用-i参数指定网卡名称
tcpdump -i ens33
​
# 如果不知道哪个网卡是开启的(UP状态),可以用如下命令查看
ip link show

3. 过滤指定网卡指定IP的数据包

代码语言:javascript
复制
# 过滤 目的IP、源IP可在host前面加对应的dir限定参数(看上图),比如dst、src
tcpdump -i ens33 host 172.16.xx.xx
​
# 过滤指定网卡指定目的IP的数据包
tcpdump -i ens33 dst host 172.16.xx.xx

4. 过滤指定网卡指定IP端口的数据包

代码语言:javascript
复制
# 过滤指定网卡指定IP端口的数据包
tcpdump -i ens33 host 172.16.xx.xx and port 9898

5. 过滤指定网卡指定IP端口的数据包,ip地址不要转成域名名称、时间正常显示年月日时分秒

代码语言:javascript
复制
# -n 参数:不要将IP端口转成域名名称
# -tttt 参数:时间戳显示yyyy-mm-dd hh:mm:ss.SS 格式
tcpdump -i ens33 -nn -tttt host 172.16.xx.xx and port 9898

6. 过滤指定网卡指定IP端口的数据包并保存在文件

这个命令现场工程一定要学会,经常听到大佬说:让现场工程抓个包回来,你用这个命令,将对应参数改一下就可以了,这不又让你装了一会大佬(哈哈哈哈)

代码语言:javascript
复制
# 过滤指定网卡指定IP端口的数据包并保存在文件
tcpdump -i ens33 -w test.pcap host 172.16.xx.xx and port 9898
​
# 可以用-C 参数指定写入抓包的文件大小(file_size的单位是百万字节,1,000,000字节,而不是1,048,576字节=1k,你可以差不多近似就1k),达到指定大小则写入另外一个文件,文件后缀编号从1开始
tcpdump -i ens33 -w test.pcap -C 10 host 172.16.xx.xx

7. 每隔一段时间输出到一定格式的文件,并指定文件大小

这里用每隔1分钟来举例:

代码语言:javascript
复制
# 用-G参数 来指定每隔一定时间转储到指定格式(strftime格式)的文件中,文件大小 10*1,000,000字节,(后面expression可以自行加,我这里没有加)
tcpdump -i ens33 -G 60 -w test-%M.pcap -C 10
​
# %M参数需要满足strftime函数定义,含义如下:
%Y:四位数的年份(例如,2023)
%m:两位数的月份(例如,01 到 12)
%d:两位数的日期(例如,01 到 31)
%H:两位数的小时(24 小时制,00 到 23)
%M:两位数的分钟(00 到 59)
%S:两位数的秒(00 到 59)

8. 以 ASCII 格式显示数据包内容,并过滤指定内容

这里的指定内容,用abc来举例

代码语言:javascript
复制
# 参数说明:
# -A: 以 ASCII 格式显示数据包内容
# -l: 设置行缓冲模式(使用 -l 选项可以将 tcpdump 的输出通过管道传输给其他命令,确保数据流实时处理。例如,你可以将 tcpdump 的输出传递给 grep 进行过滤)
tcpdump -i ens33 -A -l port 9898 | grep -C 30 'abc'

有了这8个命令+上面教你的思维方式,我相信其它高级的命令写法,你也能一网打尽。

重要的事情要重复说:上面命令没必要记,但是教你的思维一定要拥抱

三、总结

命令千千万,但只要你拥有我说的思维,你可以写出千千万命令给其它人记(这也是其它博文,复制来复制去的原因)

如果想要这份笔记的pdf文档及tcpdump官方文档pdf,请找放牛娃学编程

以往精彩火爆文章:=>

Linux 通过日志快速定位错误必掌握命令-腾讯云开发者社区-腾讯云 (tencent.com)

Linux vi最少必备掌握命令-腾讯云开发者社区-腾讯云 (tencent.com)