Blake

HTTP/HTTPS抓包丨sipt / shuttle
Shuttle是一个基于Go开发的全平台ss-local工具,具有代理、多服务器选择、HTTP/HTTPS抓包、独...
扫描右侧二维码阅读全文
03
2018/09

HTTP/HTTPS抓包丨sipt / shuttle

Shuttle是一个基于Go开发的全平台ss-local工具,具有代理、多服务器选择、HTTP/HTTPS抓包、独立DNS解析机制,目标为开发者提供便利。

作者:sipt
项目地址:https://github.com/sipt/shuttle
Fork/Star:Star

介绍

Shuttle 可以成为你的网络管理员:

  • 它实现了ss-local可以与远端的ss-server通信,能根据设置选择直连拒绝代理
  • 有更强大的规则配置:域名规则设置、IP段规则设置、GEO-IP规则设置
  • 多个ss-server时,可以进行分组管理。组中服务器选择方式支持:往返时间选择(rtt),手动选择(select)
  • 可以实现HTTP/HTTPS 抓包,反向代理,请求头修改,返回头修改,返回体伪造等
  • 支持DNS服务器设置以及多种域名解析方式:静态解析(static)、直连解析(direct)、代理服务器解析(remote)

截图示例:
1 (1).jpg

功能

  • [ ] 代理功能

    • [x] TCP(HTTP/HTTPS)
    • [ ] UDP
  • [x] 扩展功能

    • [x] HTTP抓包
    • [x] HTTPS抓包(MITM)
    • [x] 反向代理
    • [x] 复用连接内请求切分
    • [x] 请求头修改
    • [x] 返回头修改
    • [x] 请求mapping
  • [x] 远端多服务器管理

    • [x] 服务器分组包含
    • [x] 服务器选择

      • [x] RTT(往返时间)选择
      • [x] Select(手动)选择
  • [x] 代理模式

    • [x] 全局代理
    • [x] 全局直连
    • [x] 全局拒绝
    • [x] 规则代理

      • [x] DOMAIN:域名全匹配
      • [x] DOMAIN-SUFFIX:域名后缀匹配
      • [x] DOMAIN-KEYWORD:域名关键字匹配
      • [x] IP-CIDR:ip段匹配
      • [x] GEO-IP: 支持GEO-IP路由
      • [ ] USER-AGENT:HTTP头字匹配
  • [x] DNS

    • [x] static:静态地址映射
    • [x] direct:直连DNS解析
    • [x] remote:远程服务器DNS解析(防止DNS污染)
    • [x] GEO-IP判断
  • [x] 外部窗口

    • [x] API

      • [x] 获取服务器列表
      • [x] RTT分组刷新
      • [x] Select分组手动选择
      • [x] DNS缓存获取
      • [x] DNS缓存刷新
      • [x] 请求记录列表获取
      • [x] 请求记录清空
      • [x] CA证书生成
      • [x] CA证书下载
      • [x] HTTP Dump开关
      • [x] MITM 开关
      • [x] HTTP/HTTPS抓包内容获取
      • [x] 关闭Shuttle
      • [x] 重载配置
      • [x] 全局代理开关
      • [ ] 支持Websocket,完成内容增量更新
    • [x] Web UI

      • [x] 很简陋的Web UI (angular6 + ant design)
  • [ ] 优化

    • [ ] 内存优化
    • [ ] log日志

安装与启动

MacOS

准备

下载release文件并解压,完成后目录结构:

shuttle
   ├── GeoLite2-Country.mmdb
   ├── RespFiles/ #mock文件存方
   ├── shuttle  #shuttle主程序
   ├── shuttle.yaml #配置文件
   ├── start.sh #启动脚本
   └── view/ #web界面目录

打开配置文件:shuttle.yaml,启动前要注意的是端口号冲突,配置文件中预设的是:8080,8081,8082

General:
  http-port: "8080"  #http/https 代理端口
  socks-port: "8081" #socks 代理端口
  controller-port: "8082" #控制台服务端口

启动

在命令行中进入该目录,运行

./start.sh #不会有任何输出

此时不会有任何输出,此时在浏览器中打开http://localhost:8082(以controller-port: "8082"为例),如果能打开控制台页面就说明启动成功,如果打开失败可以查看shuttle.log查看原因,如果排查不出原因可以去提Issues

系统配置

打开系统偏好设置 => 网络 => 高级 => 代理,这里主要设置三个:

  • Web 代理(HTTP) 设置为127.0.0.1:8080(以http-port: "8080"为例)
  • Web 代理(HTTPS) 设置为127.0.0.1:8080(以http-port: "8080"为例)
  • SOCKS 代理 设置为127.0.0.1:8080(以socks-port: "8081"为例)

然后点击OK,再点击应用,此时用浏览器打开http://c.sipt.top这时如果已经设置代理成功这个url也是对应到控制台页面。

命令行走代理:

export https_proxy="http://127.0.0.1:8080"
export http_proxy="http://127.0.0.1:8080"
export all_proxy="socks5://127.0.0.1:8081"

Windows

准备

下载release文件并解压,完成后目录结构:

shuttle
   ├── GeoLite2-Country.mmdb
   ├── RespFiles/ #mock文件存方
   ├── shuttle  #shuttle主程序
   ├── shuttle.yaml #配置文件
   ├── startup.bat #启动
   └── view/ #web界面目录

打开配置文件:shuttle.yaml,启动前要注意的是端口号冲突,配置文件中预设的是:8080,8081,8082

General:
  http-port: "8080"  #http/https 代理端口
  socks-port: "8081" #socks 代理端口
  controller-port: "8082" #控制台服务端口

启动

双击打开startup.bat,此时不会有任何输出,此时在浏览器中打开http://localhost:8082(以controller-port: "8082"为例),如果能打开控制台页面就说明启动成功,如果打开失败可以查看shuttle.log查看原因,如果排查不出原因可以去提Issues

系统配置

打开系统偏好设置 => 网络 => 代理:设置为127.0.0.1:8080(以http-port: "8080"为例)

此时用浏览器打开http://c.sipt.top这时如果已经设置代理成功这个url也是对应到控制台页面。

Linux

准备

下载release文件并解压,完成后目录结构:

shuttle
   ├── GeoLite2-Country.mmdb
   ├── RespFiles/ #mock文件存方
   ├── shuttle  #shuttle主程序
   ├── shuttle.yaml #配置文件
   ├── start.sh #启动脚本
   └── view/ #web界面目录

打开配置文件:shuttle.yaml,启动前要注意的是端口号冲突,配置文件中预设的是:8080,8081,8082

General:
  http-port: "8080"  #http/https 代理端口
  socks-port: "8081" #socks 代理端口
  controller-port: "8082" #控制台服务端口

启动

在命令行中进入该目录,运行

./start.sh #不会有任何输出

此时不会有任何输出,此时在浏览器中打开http://localhost:8082(以controller-port: "8082"为例),如果能打开控制台页面就说明启动成功,如果打开失败可以查看shuttle.log查看原因,如果排查不出原因可以去提Issues

配置

版本

ver: v1.0.0

当前配置文件版本只支持v1.0.0,不可修改

常规配置

General:
  loglevel: "info"
  dns-server:
  - "114.114.114.114"
  - "223.5.5.5"
  http-port: "8080"
  http-interface: "0.0.0.0"
  socks-port: "8081"
  socks-interface: "0.0.0.0"
  controller-port: "8082"
  controller-interface: "0.0.0.0"
名称描述
loglevel打印log的等级,建议info或errortrace,debug,info,error
dns-serverDNS服务器地址IP地址数组
http-portHTTP/HTTPS 代理端口
http-interfaceHTTP/HTTPS 代理访问控制
socks-portSOCKS 代理端口
socks-interfaceSOCKS 代理访问控制
controller-port控制器服务端口
controller-interface控制器服务访问控制

DNS配置

Local-DNS:
- ["DOMAIN", "localhost", "static", "127.0.0.1"]
- ["DOMAIN-KEYWORD", "google", "remote", ""]
- ["DOMAIN-SUFFIX", "baidu.com", "direct", "114.114.114.114"]

对应格式:

- ["匹配方式", "值", "解析方式", "参数"]
匹配方式描述
DOMAIN-SUFFIX域名后缀匹配域名后缀
DOMAIN域名全匹配域名
DOMAIN-KEYWORD域名关键字匹配关键字
解析方式描述参数
static静态解析对应的IP地址
direct直连DNS服务器解析DNS服务器地址
remote让远端服务器解析

规则配置

Rule: # 代理规则
- ["DOMAIN-SUFFIX", "gitlab.anjian.com", "DIRECT", ""]
# - [域名全匹配,域名,走分组Proxy,]
- ["DOMAIN", "sipt.top", "Proxy", ""]
# - [域名关键字匹配,关键字,拒绝连接,]
- ["DOMAIN-KEYWORD", "zjtoolbar", "REJECT", ""]
# - [IP网段断匹配,IP网段,直连,]
- ["IP-CIDR", "127.0.0.0/8", "DIRECT", ""]
# - [GEOIP匹配,中国,走nProxy组规则,]
- ["GEOIP", "CN", "nProxy", ""]
# - [以上都不满足,,走Proxy组规则,]
- ["FINAL", "", "Proxy", ""]

格式:

- ["匹配方式","值","连接方式","备注"]
匹配方式描述
DOMAIN-SUFFIX域名后缀匹配域名后缀
DOMAIN域名全匹配域名
DOMAIN-KEYWORD域名关键字匹配关键字
IP-CIDRIP网段断匹配IP网段
GEOIPGEOIP匹配国家编码
FINAL以上都不满足[无]
连接方式描述
DIRECT直接连接目标服务器
REJECT拒绝连接
配置的服务器名
配置的服务器分组名

还有很多功能,大家可以去作者的README看一下,恼人的500 DataBase Query Error。准备换平台了。

最后修改:2018 年 09 月 03 日 09 : 57 PM

发表评论