过滤表达式

优质
小牛编辑
132浏览
2023-12-01

过滤表达式

mitmproxy工具中的许多命令都使用过滤器表达式。过滤器表达式由以下运算符组成:

命令描述
〜a匹配响应资源:CSS,Javascript,Flash,images。
〜b regexBody
〜bq regex请求的Body
〜bs regex响应的Body
〜c intHTTP响应码
〜d regex域名
〜dst regex匹配目标地址
〜e匹配错误
〜h regexHeader
〜hq regex请求Header
〜hs regex响应Header
〜http匹配HTTP流
〜m regex方法
〜marked匹配marked流
〜q匹配无响应请求
〜s匹配response响应
〜src regex匹配来源地址
〜t regexContent-type header
〜tcp匹配TCP流
〜tq regex请求Content-Type Header
〜ts regex响应Content-Type Header
〜u regex网址URL
〜websocket匹配WebSocket流(和HTTP-WebSocket握手流)
!一元非
&
|或者
(...)分组
  • regex是Python风格的
  • 可以将 regex指定为带引号的字符串
  • Header匹配(〜h,〜hq,〜hs)针对的是“name: value”形式的字符串。
  • 没有运算符的字符串将与请求URL匹配。
  • 默认的二进制运算符是&。

查看流选择器

在交互式上下文中,mitmproxy具有一组在当前视图上运行的便捷流选择器:

  • @all 所有流量
  • @focus 当前关注的流程
  • @shown 当前显示的所有流
  • @hidden 当前隐藏所有流
  • @marked 所有标记的流
  • @unmarked 所有未标记的流

这些经常在命令和键绑定中使用。

例子

包含“google.com”的网址:

google\.com

请求的主体包含字符串“test”

~q ~b test

除了文字/ html内容类型的请求以外的所有内容:

!(~q & ~t "text/html")

替换请求中的整个GET字符串(使它生效所需的引号):

':~q ~m GET:.*:/replacement.html'