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'开头

⑥ tcp[13]由来

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的字节 tcp[13]详解

⑦ 根据 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 分钟前
创客匠人峰会深度解析:知识变现的 “信任 - 效率” 双闭环 —— 从 “单次交易” 到 “终身复购” 的增长密码
大数据·网络·人工智能·tcp/ip·重构·数据挖掘·创客匠人
老蒋新思维5 小时前
创客匠人峰会新解:AI 时代知识变现的 “信任分层” 法则 —— 从流量到高客单的进阶密码
大数据·网络·人工智能·tcp/ip·重构·创始人ip·创客匠人
Smile_25422041810 小时前
解决本地 Windows 开发机无法注册到 PowerJob 服务器的问题
java·tcp/ip
此生只爱蛋15 小时前
【Linux】网络层IP
服务器·网络·tcp/ip
itas10915 小时前
windows单网卡配置多网段IP
windows·网络协议·tcp/ip·多网段ip
老蒋新思维15 小时前
创客匠人峰会新解:高势能 IP 打造 ——AI 时代知识变现的十倍增长密码
大数据·网络·人工智能·tcp/ip·创始人ip·创客匠人·知识变现
老蒋新思维15 小时前
创客匠人峰会洞察:AI 时代教育知识变现的重构 —— 从 “刷题记忆” 到 “成长赋能” 的革命
大数据·人工智能·网络协议·tcp/ip·重构·创始人ip·创客匠人
爬山算法16 小时前
Netty(7)如何实现基于Netty的TCP客户端和服务器?
java·服务器·tcp/ip
@CLoudbays_Martin111 天前
什么是IP黑洞?
网络·网络协议·tcp/ip
老蒋新思维1 天前
创客匠人 2025 万人峰会核心:AI 驱动知识产品变现革新
大数据·人工智能·网络协议·tcp/ip·创始人ip·创客匠人·知识变现