过滤表达式

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

命令 描述
〜a 匹配响应资源:CSS,Javascript,Flash,images。
〜b regex Body
〜bq regex 请求的Body
〜bs regex 响应的Body
〜c int HTTP响应码
〜d regex 域名
〜dst regex 匹配目标地址
〜e 匹配错误
〜h regex Header
〜hq regex 请求Header
〜hs regex 响应Header
〜http 匹配HTTP流
〜m regex 方法
〜marked 匹配marked流
〜q 匹配无响应请求
〜s 匹配response响应
〜src regex 匹配来源地址
〜t regex Content-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'