tcpdump(五)命令行参数讲解(四)

案例讲解

tcpdump官方参考文档 最全的tcpdump手册

bash 复制代码
强调: -nn 选项一般是'must 必选'

① 现场分析并保留现场信息

bash 复制代码
tcpdump -l | tee dat  使用tee来把tcpdump的输出同时放到'文件dat'和'标准输出'中

场景: 自己现场'分析'同时把现场信息'保留下来'

② 提取 应用层HTTP 的 Header头

bash 复制代码
场景: 查看原始'HTTP 头'的形式,查看在'哪个阶段'头被修改,进行定位

  1、浏览器的'跨域'      --> 'tcpdump'抓取到了,但是浏览器'拦截'了

  2、HSTS              --> '浏览器把http升级为https'

  3、经过中间层'nginx'等 --> 'Host、Cookies、Set-Cookies'等

+++++++++++++ "分割线" +++++++++++++

需求1: 提取'User-Agent' 或 'Host' 主机名

tcpdump -nn -A -s0 -l | egrep -i 'User-Agent:|Host:'

备注: 只查看'固定'关键信息

需求2: 抓取Request和response里的'Cookie'

tcpdump -i eth0 -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'

建议: 通过'ip'信息更'精确'一点

③ 只抓取HTTP流量

如何使用tcpdump抓取一次http的请求和响应

bash 复制代码
需求1: 抓取 HTTP 'GET' 请求包

tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
​
0x47455420 代表的是 'GET'  的ASCII码

强调: 必须 '深刻' 理解 tcp的'报文结构'才能写出'精确'的过滤条件,后续'再回看'

需求2: 目的'端口为80'的HTTP 'GET' 请求

tcpdump -i eth0 -s0 -A 'tcp dst port 80 and \

tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

强调: 知道'原理'即可,后续'拿来即用'即可

++++++++++++++++++++  "原理剖析"  ++++++++++++++++++++ 
bash 复制代码
关键点: 除以'4'在'位运算'中相当于左移'<< 2'位
bash 复制代码
需求3:可以抓取 HTTP 'POST' 请求包

tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'

备注: 0x504F5354 代表的是 'POST' 的ASCII码

注意: '不能保证'抓取到 HTTP POST 有效数据流量,因为一个POST请求会被分割为'多个'TCP数据包

④ 抓取HTTP GET和POST request和response

bash 复制代码
tcpdump -i eth0 -s 0 -A \

'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or \

tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 or \

tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or \

tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F and host 192.168.10.1'

⑤ 多方向

bash 复制代码
需求: 同时抓'多个'地址,其中'一个方向'地址为'多'个

tcpdump -i eth0 dst 1.1.1.1 and src '(2.2.2.2 or 3.3.3.3)' -nn

⑥ 找出发包数最多的 IP

bash 复制代码
需求: 找出'一段时间内'发包最多的 IP,或者从一堆报文中找出'发包最多的 ip'

tcpdump -nn -t -c 200 | cut -f 1,2,3,4 -d '.' | sort | uniq -c \

| sort -nr | head -n 20

cut -f 1,2,3,4 -d '.'   --> 以 '.' 为分隔符,打印出每行的'前四列' --> 即 IP 地址

sort | uniq -c          --> 排序并计数

sort -nr                --> 按照数值大小逆向排序

⑦ TLS案例

bash 复制代码
说明: 画了一张'示意图来'表示'报文偏移量'及其'含义',帮你理解其中的'奥妙'

tcpdump的输出和tcpdump的报错(权限和内容截断)

⑧ 基础服务

bash 复制代码
需求1:  在'lvs节点'上抓包,不管使用是'ECMP静态等价路由'还是'BGP动态路由','fullnat'模式

链路:   client -->'lvs'-->四层服务

++++++++++++++  "分割线"  ++++++++++++++
​
备注1: 由于lvs是'集群'模式,请求可能'落到'某个lvs节点上,所以所有的'lvs节点'都要抓包

备注2: 同一集群'不同'lvs节点'LIP不一样'

备注3: 默认为src or dst,不指定'方向',建议使用'()'可读性比较好

遗留:  host 1.1.1.1 and port 8080 啥原因? '白名单吗'? --> '业务特性'?

思考:  'DR模式'如何抓包?
bash 复制代码
需求2: nginx'节点'抓包

链路: client --> '四层lvs' --> '7层nginx' --> '七层云服务'

备注: nginx也是'集群'模式,需要在'多个nginx节点上'同时抓包

补充: 不需要关注'nginx节点自身的ip'
bash 复制代码
需求3: 'DNS'和'NTP'抓包

tcpdump排查DNS解析

相关推荐
张忠琳3 小时前
【SR-IOV cni】(Part 4) SR-IOV Network Device Plugin 3.11.0 — 超深度架构分析
网络·云原生·kubernetes·cni·sriov
汤愈韬4 小时前
IPSec-NAT穿越原理和配置
网络·网络协议·安全·网络安全·security
疯狂打码的少年5 小时前
输入输出控制方式:DMA(直接存储器存取)
网络·笔记
知无不研5 小时前
对套接字的深入理解
linux·服务器·网络·c++·socket·网络套接字
xyzzklk5 小时前
解决Salesforce无法向外发送邮件
android·java·开发语言·网络·crm·salesforce·客户关系管理
珠***格7 小时前
实操落地|防逆流装置的安装规范、调试标准与故障处置
网络·数据库·人工智能·分布式·能源·边缘计算
国科安芯7 小时前
国科安芯推出商业航天级抗辐照全双工 RS485/422 收发器 ASC491S2Y
网络·分布式·单片机·架构·安全性测试
浮芷.9 小时前
鸿蒙PC端 TTS 网络连接错误问题详解:在线/离线模式切换与网络状态管理
网络·华为·开源·harmonyos·鸿蒙·鸿蒙系统
雪度娃娃9 小时前
ASIO异步通信——多线程模型
开发语言·网络·c++·php
luj_17689 小时前
残熵算法:风险缓冲与效率优化的融合
c语言·开发语言·网络·经验分享·算法