{"id":13446788,"url":"https://github.com/sipt/shuttle","last_synced_at":"2025-05-15T16:07:50.372Z","repository":{"id":40685844,"uuid":"145510605","full_name":"sipt/shuttle","owner":"sipt","description":"A web proxy in Golang with amazing features.","archived":false,"fork":false,"pushed_at":"2023-07-17T01:17:18.000Z","size":18187,"stargazers_count":2064,"open_issues_count":30,"forks_count":292,"subscribers_count":58,"default_branch":"master","last_synced_at":"2025-04-07T21:14:44.747Z","etag":null,"topics":["dns","go","mitm","proxy"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sipt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-08-21T05:22:05.000Z","updated_at":"2025-03-26T03:03:29.000Z","dependencies_parsed_at":"2024-01-07T22:44:50.783Z","dependency_job_id":"172ebcc0-65cb-45e3-8713-3d643bdae6e6","html_url":"https://github.com/sipt/shuttle","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipt%2Fshuttle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipt%2Fshuttle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipt%2Fshuttle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipt%2Fshuttle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sipt","download_url":"https://codeload.github.com/sipt/shuttle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254374475,"owners_count":22060611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dns","go","mitm","proxy"],"created_at":"2024-07-31T05:00:59.966Z","updated_at":"2025-05-15T16:07:45.353Z","avatar_url":"https://github.com/sipt.png","language":"Go","readme":"# Shuttle\n\n**Shuttle** is a **cross-platform** network proxy tool based on Go. Feel free to join our [Slack](https://join.slack.com/t/shuttle-talk/shared_invite/enQtNDMxNTQyNTIwODcwLTcyNTc0NmU4MzJhOTEzNTMwYWJlMGM1NDE2OTA2OWNmZDRlM2M0MjYxNjgzMTc1YWRhOTA4MTAzNTRkZDM0NDc) or [Telegram](https://t.me/joinchat/GrRxoBJXAKTdZBrTIJfIbQ).\n（logo created by **@不二**）\n\n![Shuttle](./Shuttle_Logo.PNG)\n\n- [中文文档](README_zh.md)\n- [Introduction](#introduction)\n- [Features](#features)\n- [Installation \u0026 Launch](#installation--launch)\n  - [macOS](#macos)\n  - [Windows](#windows)\n  - [Linux](#linux)\n- [Configuration](#configuration)\n  - [Version](#version)\n  - [General Settings](#general-settings)\n  - [Proxy Settings](#proxy-settings)\n  - [DNS](#dns)\n  - [Request/Response Modification \u0026 URL Rewrite](#request/response-modification--url-rewrite)\n  - [MitM](#mitm)\n  - [Rule Configuration](#rule-configuration)\n- [API](static/API.md)\n- [Web Dashboard](#web_dashboard)\n  - [Servers](#servers)\n  - [DNS Cache](#dns-cache)\n  - [Records](#records)\n  - [Traffic Capture](#traffic-capture)\n\n(Translated by [wao1201](https://github.com/wao1201), reviewed by [Joe Hill](https://github.com/Joe-Hill).)\n\n## Introduction\n\nShuttle is a cross-platform network proxy tool based on Go.\n\n*  `SOCKS5`、`SOCKS5 over TLS`、`shadowsocks` protocols supported.\n* Proxying via rules: domain, IP CIDR and GEO-IP.\n* Customized policy: direct, reject and proxy.\n* Multiple proxy servers selection and grouping management. The policy of servers selection can be RTT(Round-trip time) or manual select.\n* HTTP/HTTPS traffic capture, reverse proxy, request head modification, response head modification and fake return value supported.\n* DNS parsing types: static, direct, remote.\n\nModule Structure:\n\n![shuttle_architecture](static/shuttle_architecture.png)\n\nScreenshots:\n\n![Introduction](static/example.jpg)\n\n## Features\n- [ ] Proxy type\n  - [x] TCP(HTTP/HTTPS)\n  - [ ] UDP\n- [x] HTTP/HTTPS request extension\n  - [x] Traffic capture (MITM supported)\n  - [x] URL rewrite\n  - [x] Request/response modification\n  - [x] Request mapping\n- [x] Remote servers management\n  - [x] Server grouping\n  - [x] Protocols supported\n    - [x] shadowsocks\n    - [x] SOCKS5\n    - [x] SOCKS5 over TLS\n  - [x] Grouping server selection policy\n    - [x] RTT\n    - [x] Manual select\n- [x] Outbound Mode\n  - [x] Global, direct and reject\n  - [x] Rules\n    - [x] DOMAIN: full name match\n    - [x] DOMAIN-SUFFIX: suffix match\n    - [x] DOMAIN-KEYWORD: keyword match\n    - [x] IP-CIDR: IP range match\n    - [x] GEO-IP: GEO-IP route supported\n- [x] DNS parsing type\n  - [x] static：static address mapping\n  - [x] direct：local DNS resolve\n  - [x] remote：remote server DNS resolve (prevent DNS Cache Poisoning)\n- [x] External module\n  - [x] API ( see API document for details)\n  - [x] Web UI\n    - [x] Web UI (angular6 + ant design)\n\n## Installation \u0026 Launch\n\n### macOS\n\n#### Preparation\n\nDownload the zip file from release and unzip it. The Folder structure is shown below.\n\n```shell\nshuttle\n   ├── RespFiles/ #mock file directory\n   ├── shuttle  #shuttle main executable\n   ├── shuttle.yaml #config file\n   └── start.sh #launch script\n\n```\n\nOpen the config file, `shuttle.yaml`. Make sure all the ports are all configured correctly before launching. The default ports in config file are `8080`, `8081` and  `8082`.\n\n```yaml\nGeneral:\n  http-port: \"8080\"  #http/https port\n  socks-port: \"8081\" #socks port\n  controller-port: \"8082\" #dashboard port\n```\n\n#### Launch\n\nGo to the shuttle directory and enter the command below in terminal/CMD to launch the app.\n\n```shell\n./start.sh #no output\n```\n\nOpen your browser and visit  `http://localhost:8082` (For example, use the default settings `controller-port: \"8082\"`). The application has already run successfully if you can visit the dashboard on your browser.  Otherwise check the `shuttle.log` for more details and new issues anytime.\n\n#### System Configuration\n\nIf you can visit  `http://c.sipt.top` on your browser, you can skip the following steps directly.\n\nOpen System Preference  =\u003e Network =\u003e Advanced =\u003e Proxy，there are 3 main options:\n\n* `Web Proxy（HTTP）` set to `127.0.0.1:8080` (for example, `http-port: \"8080\"`)\n* `Web Proxy（HTTPS）`  set to `127.0.0.1:8080`（for example,  `http-port: \"8080\"`）\n* `SOCKS Proxy` set to `127.0.0.1:8080`（for example,  `socks-port: \"8081\"`）\n\nPress `OK` and click `Apply`. The proxy settings are working if you can see the dashboard by visiting `http://c.sipt.top` on browser.\n\nEnter the following commands to make Terminal.app go through proxies:\n\n```shell\nexport https_proxy=\"http://127.0.0.1:8080\"\nexport http_proxy=\"http://127.0.0.1:8080\"\nexport all_proxy=\"socks5://127.0.0.1:8081\"\n```\n\n### Windows\n\n#### Preparation\n\nDownload the zip file from release and unzip it. The Folder structure is shown below.\n\n```\nshuttle\n   ├── RespFiles/ #mock file directory\n   ├── shuttle  #shuttle main executable\n   ├── shuttle.yaml #config file\n   └── startup.bat #launch script\n\n```\n\nOpen the config file, `shuttle.yaml`. Make sure all the ports are all configured correctly before launching. The default ports in config file are `8080`, `8081` and  `8082`.\n\n```yaml\nGeneral:\n  http-port: \"8080\"  #http/https port\n  socks-port: \"8081\" #socks port\n  controller-port: \"8082\" #dashboard port\n```\n\n#### Launch\n\nDouble-click `startup.bat`, there will be no output on screen. Open your browser and visit  `http://localhost:8082` (For example, use the default settings `controller-port: \"8082\"`). The application has already run successfully if you can visit the dashboard on your browser.  Otherwise check the `shuttle.log` for more details and new issues anytime.\n\n#### System Configuration\n\nIf you could open `http://c.sipt.top` in your browser, you can skip the following steps directly.\n\nOpen System Preference  =\u003e Network =\u003e Proxy, set to `127.0.0.1:8080`（for example: `http-port: \"8080\"`）. The proxy settings are working if you can see the dashboard by visiting `http://c.sipt.top` on browser.\n\n### Linux\n\n#### Preparation\n\nDownload the zip file from release and unzip it. The Folder structure is shown below.\n\n```\nshuttle\n   ├── RespFiles/ #mock file directory\n   ├── shuttle  #shuttle main executable\n   ├── shuttle.yaml #config file\n   └── start.sh #launch script\n\n```\n\nOpen the config file, `shuttle.yaml`. Make sure all the ports are all configured correctly before launching. The default ports in config file are `8080`, `8081` and  `8082`.\n\n```yaml\nGeneral:\n  http-port: \"8080\"  #http/https port\n  socks-port: \"8081\" #socks port\n  controller-port: \"8082\" #dashboard port\n```\n\n#### Launch\n\nGo to the shuttle directory and enter the command below in terminal/CMD to launch the app.\n\n```shell\n./start.sh #no output\n```\n\nOpen your browser and visit  `http://localhost:8082` (For example, use the default settings `controller-port: \"8082\"`). The application has already run successfully if you can visit the dashboard on your browser.  Otherwise check the `shuttle.log` for more details and new issues anytime.\n\n## Configuration\n\n### Version\n\n```yaml\nver: v1.0.1\n```\n\nCurrent config file only supports `v1.0.1`. Don't edit yourself.\n\n### General Settings\n\n```yaml\nGeneral:\n  loglevel: \"info\"\n  dns-server:\n  - \"114.114.114.114\"\n  - \"223.5.5.5\"\n  http-port: \"8080\"\n  http-interface: \"0.0.0.0\"\n  socks-port: \"8081\"\n  socks-interface: \"0.0.0.0\"\n  controller-port: \"8082\"\n  controller-interface: \"0.0.0.0\"\n```\n\n| Name                 | Description                                       | Value                  |\n| -------------------- | ------------------------------------------------- | ---------------------- |\n| loglevel             | Log output level, better use level: info or error | trace,debug,info,error |\n| dns-server           | DNS server address                                | IP address             |\n| http-port            | HTTP/HTTPS port                                   |                        |\n| http-interface       | HTTP/HTTPS port                                   |                        |\n| socks-port           | SOCKS port                                        |                        |\n| socks-interface      | SOCKS control                                     |                        |\n| controller-port      | dashboard port                                    |                        |\n| controller-interface | dashboard control                                 |                        |\n\n### Proxy Settings\n\nServer name and server group name should not be repeating. **DIRECT**, **REJECT** and **GLOBAL** are reserved name.\n\n#### Server\n\n```yaml\nProxy:\n  \"🇯🇵JP_a\": [\"ss\", \"jp.a.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"🇯🇵JP_b\": [\"ss\", \"jp.b.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"🇯🇵JP_c\": [\"ss\", \"jp.c.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"🇭🇰HK_a\": [\"ss\", \"hk.a.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"🇭🇰HK_b\": [\"ss\", \"hk.b.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"🇭🇰HK_c\": [\"ss\", \"hk.c.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"🇺🇸US_a\": [\"ss\", \"us.a.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"🇺🇸US_b\": [\"ss\", \"us.b.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"🇺🇸US_c\": [\"ss\", \"hk.c.example.com\", \"12345\", \"rc4-md5\", \"123456\"]\n  \"socks\": [\"socks\", \"localhost\", \"12345\"]\n  \"socks-tls\": [\"socks-tls\", \"localhost\", \"12345\", \"skip-verify\"]\n  \"socks-auth\": [\"socks\", \"localhost\", \"12345\", \"user\", \"password\"]\n  \"socks-tls-auth\": [\"socks-tls\", \"localhost\", \"12345\", \"skip-verify\", \"user\", \"password\"]\n  ...\n```\n\nServer protocols:\n\n* ss: shadowsocks; \n\n  format：\n\n  ```yaml\n  \"server name\": [\"ss\", \"domain/IP\", \"port\", \"cipher\", \"password\"]\n  ```\n\n  Current supported encryption methods:\n\n  * [x] aes-128-cfb\n  * [x] aes-192-cfb\n  * [x] aes-256-cfb\n  * [x] aes-128-ctr\n  * [x] aes-192-ctr\n  * [x] aes-256-ctr\n  * [x] des-cfb\n  * [x] bf-cfb\n  * [x] cast5-cfb\n  * [x] rc4-md5\n  * [x] chacha20\n  * [x] chacha20-ietf\n  * [x] salsa20\n  * [x] aes-256-gcm\n  * [x] aes-192-gcm\n  * [x] aes-128-gcm\n  * [x] chacha20-ietf-poly1305\n\n* socks: SOCKS5;\n\n  Support username/password authentication.\n\n  ```yaml\n  \"server name\": [\"socks\", \"domain/IP\", \"port\"] \n  \"server name\": [\"socks\", \"domain/IP\", \"port\", \"username\", \"password\"]\n  ```\n\n* socks-tls: SOCKS5 over TLS;\n\n  Support username/password authentication. Use: `skip-verify` or `verify` for checking server's certificate.\n\n  ```yaml\n  \"server name\": [\"socks-tls\", \"domain/IP\", \"ca check or not\", \"port\"] \n  \"server name\": [\"socks-tls\", \"domain/IP\", \"ca check or not\", \"port\", \"username\", \"password\"]\n  ```\n\n#### Server Group\n\n```yaml\nProxy-Group:\n  \"Auto\": [\"rtt\", \"🇭🇰HK_a\", \"🇭🇰HK_b\", \"🇭🇰HK_c\", \"🇯🇵JP_a\", \"🇯🇵JP_b\", \"🇯🇵JP_c\", \"🇺🇸US_a\", \"🇺🇸US_b\", \"🇺🇸US_c\"]\n  \"HK\": [\"select\", \"🇭🇰HK_a\", \"🇭🇰HK_b\", \"🇭🇰HK_c\"]\n  \"JP\": [\"select\", \"🇯🇵JP_a\", \"🇯🇵JP_b\", \"🇯🇵JP_c\"]\n  \"US\": [\"select\", \"🇺🇸US_a\", \"🇺🇸US_b\", \"🇺🇸US_c\"]\n  \"Proxy\": [\"select\", \"Auto\", \"HK\", \"JP\", \"US\"]\n  \"nProxy\": [\"select\", \"DIRECT\"]\n```\n\nFormat\n\n```yaml\n\"group name\": [\"option\", \"server name/server group name\", ... ]\n```\n\n| Option | Description                                                  |\n| ------ | ------------------------------------------------------------ |\n| select | manual select                                                |\n| rtt    | select the server that has the shortest transaction time between local(through remote server) to `www.gstatic.com` |\n\n### DNS\n\n```yaml\nLocal-DNS:\n- [\"DOMAIN\", \"localhost\", \"static\", \"127.0.0.1\"]\n- [\"DOMAIN-KEYWORD\", \"google\", \"remote\", \"\"]\n- [\"DOMAIN-SUFFIX\", \"baidu.com\", \"direct\", \"114.114.114.114\"]\n```\n\nFormat\n\n```yaml\n- [\"match option\", \"value\", \"resolve method\", \"parameter\"]\n```\n\n| Match Option   | Description          | Value         |\n| -------------- | -------------------- | ------------- |\n| DOMAIN-SUFFIX  | match domain suffix  | domain suffix |\n| DOMAIN         | match domain         | domain        |\n| DOMAIN-KEYWORD | match domain keyword | keyword       |\n\n| Resolve Option | Description                  | Parameter               |\n| -------------- | ---------------------------- | ----------------------- |\n| static         | static resolve               | corresponding IP adress |\n| direct         | use DNS to resolve           | DNS address             |\n| remote         | use remote server to resolve | N/A                     |\n\n### Request/Response Modification \u0026 URL Rewrite\n\n**HTTPS**(turn the MitM on)\n\n```yaml\nHttp-Map:\n  Req-Map: #request modification config\n    - url-rex: \"^http://www.zhihu.com\"\n      type: \"UPDATE\"\n      items:\n        - [\"HEADER\", \"Scheme\", \"http\"]\n  Resp-Map: #response modification config\n      - url-rex: \"^http://www.zhihu.com\"\n      type: \"UPDATE\"\n      items:\n         - [\"STATUS\", \"\", \"301\"]\n         - [\"HEADER\", \"Location\", \"http://www.jianshu.com\"]\n```\n\n| Name    | Description                                                  |\n| ------- | ------------------------------------------------------------ |\n| url-rex | Use regex to match requested URL                             |\n| type    | `UPDATE`（modification）and `MOCK`(local data return)，(`Resp-Map`only supports`UPDATE`) |\n| items   | An array:  `[\"modify type\", \"Key\", \"Value\"]` (details on the following table) |\n\n| Modify Type | Description                                                  | Condition                                       |\n| ----------- | ------------------------------------------------------------ | ----------------------------------------------- |\n| HEADER      | Add/modify header ([Example](#header-modify))                | (`Req-Map`or`Resp-Map`) type:(`UPDATE`or`MOCK`) |\n| STATUS      | Modify return status code ([Example](#request-mapping))      | (`Resp-Map`) type:(`UPDATE`or`MOCK`)            |\n| BODY        | Response Body([Example](#request-mapping))\u003cbr /\u003e(HTTPS domain must exists and supports HTTPS) | (`Resp-Map`) type:(`MOCK`)                      |\n| URL         | Use `url-rex` to replace `URL`，\u003cbr /\u003e**Currently, HTTPS is not supported** ([URL Rewrite](#url-rewrite)) | (`Req-Map`) type:(`UPDATE`)                     |\n\n#### Examples：\n\n##### Header Modify\n\nAdd `Scheme: http` to every request that matches `^http://www.zhihu.com`\n\n```yaml\nHttp-Map:\n  Req-Map:\n      - url-rex: \"^http://www.zhihu.com\"\n      type: \"UPDATE\"\n      items:\n        - [\"HEADER\", \"Scheme\", \"http\"]\n```\n\n##### Request Mapping\n\n**If the type is MOCK, all HTTP domains are good to go but HTTPS domains must exist and support HTTPS**\n\nFor every request that matches `^http://www.baidu.com/$`, return directly.\n\n```json\n{\n  \"name\": \"Shuttle\",\n  \"github-link\": \"https://github.com/sipt/shuttle\",\n  \"data\": \"response mock\"\n}\n```\n\nCreate a file called `mocks.json` to write in the data above under `RespFiles` directory.\n\nConfig：\n\n```yaml\nHttp-Map:\n  Req-Map:\n    - url-rex: \"^http://www.wogaoxing.abcascb\" #all HTTP domains are good to go\n      type: \"MOCK\"\n      items:\n        - [\"STATUS\", \"\", \"200\"] #return status code：200 OK\n        - [\"HEADER\", \"Content-Type\", \"application/json\"] #add header\n        - [\"BODY\", \"\", \"mock.json\"] #return data matches RespFiles/mock.json\n    - url-rex: \"^https://www.baidu.com\" #For HTTPS, domains must exist and support HTTPS\n      type: \"MOCK\"\n      items:\n        - [\"STATUS\", \"\", \"200\"] #return status code：200 OK\n        - [\"HEADER\", \"Content-Type\", \"application/json\"] #add header\n        - [\"BODY\", \"\", \"mock.json\"] #return data matches RespFiles/mock.json\n```\n\n##### URL Rewrite\n\n**HTTPS is not supported currently**\n\nFor every request that matches `^http://www.baidu.com`, use reverse proxy to redirect to `http://www.zhihu.com`：\n\n```yaml\nHttp-Map:\n  Req-Map:\n    - url-rex: \"^http://www.baidu.com\"\n      type: \"UPDATE\"\n      items:\n       - [\"URL\", \"\", \"http://www.zhihu.com\"]\n```\n\n### MitM\n\n```yaml\nMITM: \n  rules: [\"*.baidu.com\", \"*.zhihu.com\"] #Domains allowed for MitM\n  ca: (base64) # CA certificate and private key, no need for configuration, Shuttle will generate them automatically and store here\n  key: (base64)\n```\n\n### Rule Configuration\n\n```yaml\nRule: # Proxy rules\n- [\"DOMAIN-SUFFIX\", \"gitlab.anjian.com\", \"DIRECT\", \"\"]\n# - [Match full domain，domain，go through Proxy group，]\n- [\"DOMAIN\", \"sipt.top\", \"Proxy\", \"\"]\n# - [keyword match，keyword，connection reject，]\n- [\"DOMAIN-KEYWORD\", \"zjtoolbar\", \"REJECT\", \"\"]\n# - [IP range match，IP range，direct connection，]\n- [\"IP-CIDR\", \"127.0.0.0/8\", \"DIRECT\", \"\"]\n# - [GEOIP match，China， go through nProxy group，]\n- [\"GEOIP\", \"CN\", \"nProxy\", \"\"]\n# - [match none of above，， go through Proxy group，]\n- [\"FINAL\", \"\", \"Proxy\", \"\"]\n```\n\nFormat.\n\n```yaml\n- [\"match option\"，\"value\"，\"connection type\"，\"memo\"]\n```\n\n| Match Option   | Description            | Value         |\n| -------------- | ---------------------- | ------------- |\n| DOMAIN-SUFFIX  | match domain suffix    | domain suffix |\n| DOMAIN         | match full domain name | domain        |\n| DOMAIN-KEYWORD | match domain keyword   | keyword       |\n| IP-CIDR        | match IP range         | IP range      |\n| GEOIP          | GEOIP match            | country code  |\n| FINAL          | match none of above    | N/A           |\n\n| Connection Type   | Description                        |\n| ----------------- | ---------------------------------- |\n| DIRECT            | connect designated server directly |\n| REJECT            | connection rejected                |\n| Server name       |                                    |\n| Server group name |                                    |\n\n## Web Dashboard\n\nhttp://c.sipt.top\n\n### Servers\n\n![Servers](static/servers.png)\n\n1. GLOBAL group was created by Shuttle. It will be selected in \"Remote Mode\".\n2. Refresh RTT-Time.\n3. Check new.\n4. Up/Down speed.\n5. Outbound Mode: Rule Mode, Remote Mode, Direct Mode, Reject Mode.\n6. Dump: Capturing HTTP requests; MitM: Man-in-the-MiddleAttack.\n7. Reload the config file. Shutdown the Shuttle.\n\n### DNS Cache\n\n![dns-cache](static/dns_cache.jpg)\nCheck all DNS records\nThe Refresh button and Clear button is on the left-hand corner. The Refresh button currently only support all records refresh.\n\n### Records\n\n![Records](static/records.jpg)\nCheck all request, and the corresponding rule.\nCurrently, only the latest 500 entries will be stored, and keyword filter is supported\n\n### Traffic Capture\n\nYou can enable Dump for HTTP traffic capture. All the Dumped Data would show the DOWNLOAD icon the every records. You can click and see for more detail.\n\nIt's a little bit complicated for HTTPS traffic capture. You can follow the steps to try it out.\n\n![Cert](static/cert.jpg)\n\n1. Generate a certificate. A new CA would be generated and stored in the config file when you click the GENERATE button each time.\n2. Click DOWNLOAD button to download the CA.\n3. Add the CA to system and trust the CA.\n4. The table above will list all HTTPS traffic that could be captured based on rules. You can add yourt own rules. Shuttle will not capture the HTTPS traffic matched no rules..\n5. You should enable both Dump and MitM to make HTTPS traffic capture available.\n\nLarge file download\n\n![large_dump](static/large_dump.jpg)\n\nEnter the file name in the input filed, then click download.\n\nThe dumped data just shows \"The file is too large\" instead of data detail for the better webpage performance when the file data size is over 2MB. You can download it for more details.\n\n\n### Build from source\n```sh\ngo get -d github.com/sipt/shuttle\ncd $GOPATH/src/github.com/sipt/shuttle/assets\ngo generate # package html and GeoLite2-Country.mmdb resources into assets/assets.go\ncd $GOPATH/src/github.com/sipt/shuttle/cmd\ngo build -tags release\n```","funding_links":[],"categories":["Misc","Go","\u003ca id=\"1a9934198e37d6d06b881705b863afc8\"\u003e\u003c/a\u003e通信\u0026\u0026代理\u0026\u0026反向代理\u0026\u0026隧道","\u003ca id=\"d03d494700077f6a65092985c06bf8e8\"\u003e\u003c/a\u003e工具","Go (531)","inbox","Repositories"],"sub_categories":["\u003ca id=\"56acb7c49c828d4715dce57410d490d1\"\u003e\u003c/a\u003e未分类-Proxy","\u003ca id=\"0ff94312f3ab4898f5996725133ea9d1\"\u003e\u003c/a\u003e未分类"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsipt%2Fshuttle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsipt%2Fshuttle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsipt%2Fshuttle/lists"}