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

一 BPF高级过滤条件

高级filter官方地址 常见需求案例汇总

bash 复制代码
过滤的目的:获取最'精细'、'准确'的数据

思考: 抓取'更精确'的包?

   1) 'tcp/ip' 报文结构要'精通',这样才能知道如何获取自己'想要的信息' -> '偏移量'

   2) tcpdump 的'synax语法'要精通,要'正确写对'

   3) 多练习,任何东西不是'一蹴而就'的,保持好耐心,熟练

如何抓取到更精确的包

① 多条件过滤规则组合

bash 复制代码
通过命令选项的不同组合 '使用 逻辑运算符' 完成'更复杂'的任务

说明: 以下'两种'符号'通用'

and: 所有的条件都需要满足,也可以表示为 '&&'

or:  只要有一个条件满足就可以,也可以表示为 '||'

not: 取反,也可以使用 '!'

优先级: 取反操作有'最高'优先级,'或'操作和'and'操作有'相同'的优先级,运算时从'左到右'结合
bash 复制代码
细节: 由于'()'在'tcpdump'和'shell'中都有特殊含义,避免被'shell'转义,需要加'\'

推荐: 使用'()'、'单引号'增加'read 可读性'

② 条件判断

bash 复制代码
=:  判断二者'相等'

==: 判断二者'相等'

!=: 判断二者'不相等'

补充: '&'是位操作符、'>>'和'<<' 是移位操作符

③ 基于包大小进行过滤

④ 根据 mac 地址进行过滤

bash 复制代码
其中 ehost 是记录在 /etc/ethertypes 里的 'name'  --> '未验证'

tcpdump ether host  [ehost]

tcpdump ether dst	[ehost]

tcpdump ether src	[ehost]

⑤ 数据包标志位

bash 复制代码
tcpdump 支持我们根据'数据包的标志位'进行过滤  --> 抓取'指定TCP标识位'的数据包

语法: proto[expr:size]

 1) proto:可以是熟知的'协议之一'  --> 如'ip',arp,'tcp',udp,'icmp',ipv6等

  强调: 并不'局限于'tcp[tcpflags]形式
 
 2) expr: 可以是'数值',也可以是一个'表达式',表示与'指定的协议头开始处'的字节'偏移量'

  补充: 还可以是'别名常量'形式

  强调: 后续需要充分理解'tcp/ip'协议簇才能理解和书写正确的'偏移量' --> '字节'
 
 3) size: 是'optional 可选'的,表示'从字节偏移量'开始取的'字节数量count'

补充: 对于 'proto[expr:size] =z' 形式

  1) 当z为'一个'字节时,z为'10'进制

  2) 当z为'多'字节时,z为'16'进制,用'0x'开头

⑥ tcp13由来

bash 复制代码
分析: 编号从'0'开始算,TCP'控制标志'位于13字节,分析编号'13'的字节

强调: 需要理解'bytes'、'bit' 含义  --> 1 bytes = 8bit
bash 复制代码
TCP包里有个'flags字段'表示'包'的类型,tcpdump可以根据'该字段'抓取相应类型的包:

tcp[13] 就是 TCP flags '(URG,ACK,PSH,RST,SYN,FIN)',按照这个计算标志位置位后的'数值'
​
tcp[tcpflags] '等价' tcp[13]

编号13的字节 tcp13详解

⑦ 根据 tcpflags 进行过滤

bash 复制代码
tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg 可以理解为'别名常量'

强调: 由于数字'不好记忆',所以一般使用这样的"别名常量"表示
bash 复制代码
二进制'按位与'运算符& : 0&0=0;  0&1=0  1&1=1

运算规则:如果两个二进制数的同一个位数上的数'都为1',则当前位'为1',否则为0

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

补充: 全'数值'的形式,二者也可以'混合'使用

tcpdump 'tcp[13] & 32!=0'   所有 URGENT ( URG ) 包

tcpdump 'tcp[13] & 16!=0'   所有 ACKNOWLEDGE ( ACK ) 包

tcpdump 'tcp[13] & 8!=0'    所有 PUSH ( PSH ) 包

tcpdump 'tcp[13] & 4!=0'    所有 RESET ( RST ) 包

tcpdump 'tcp[13] & 2!=0'    所有 SYNCHRONIZE ( SYN ) 包

tcpdump 'tcp[13] & 1!=0'    所有 FINISH ( FIN ) 包

tcpdump 'tcp[13]=18'        所有 SYNCHRONIZE/ACKNOWLEDGE ( SYNACK ) 包

⑧ 其它高级

相关推荐
睿智の男孩2 小时前
MIG IP核对DDR3的输出时序分析记录
网络·网络协议·tcp/ip
一只小鱼儿吖4 小时前
代理 IP 实战指南:住宅/机房代理选型策略
网络·网络协议·tcp/ip
XiaoMaqqqq6 小时前
目前正规的IP驱动产业新场景新工具哪个好
网络·python·网络协议·tcp/ip
0+1116 小时前
Linux --传输层协议 TCP
linux·网络·tcp/ip
笨手笨脚の7 小时前
从一行 ip route 到容器跨主机通信
网络·网络协议·tcp/ip
zd8451015008 小时前
基于 HTML 与 Modbus TCP 构建设备仪器上位机:可行性分析与代码结构设计
前端·tcp/ip·html
.Hypocritical.11 小时前
计算机网络】吃透 OSI 七层模型与 TCP/IP 协议栈
网络协议·tcp/ip·计算机网络
北京盛世宏博1 天前
通信异常深度排查:以太网温湿度设备 TCP 粘包、UDP 丢包根治方案
单片机·网络协议·tcp/ip·udp·以太网·传感器·温湿度
false_or_true1 天前
一次由 tcp_tw_recycle 引发的“灵异”故障排查:基于双网闸架构的踩坑记
网络·tcp/ip·架构
Escalating_xu1 天前
【Linux 网络编程】网络基础概念(下):IP、端口、Socket 与网络字节序,写代码前先打好基础
linux·网络·tcp/ip