Skip to content

A lightweight proxy for capturing HTTP(S) and WS(S) traffic.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

sigoden/proxyfor

Repository files navigation

Proxyfor

CI Crates Docker Pulls

A lightweight proxy for capturing HTTP(S) and WS(S) traffic.

Features

  • Support forward/reverse proxy
  • Support filtering
  • Support HTTP/HTTPS/WS/WSS protocols
  • Integrate terminal user interface (TUI)
  • Integrate web user interface (WebUI)
  • Integrate certificates installation webapp
  • Capture req/res bodies in a non-blocking, streaming manner
  • Export in Markdown, cURL, or HAR formats
  • Written in Rust, offering a single executable with no external dependencies

Screenshots

Terminal User Inferace proxyfor-tui

Web User Inferace proxyfor-webui

Dump all traffics proxyfor-dump

Installation

With cargo

cargo install proxyfor

With docker

docker run -v ~/.proxyfor:/.proxyfor -p 8080:8080 --rm sigoden/proxyfor --web 

Binaries on macOS, Linux, Windows

Download from Github Releases, unzip and add proxyfor to your $PATH.

Proxy Type

Forward Proxy

The client sets the proxy to http://127.0.0.1:8080.

$ proxyfor
$ curl -x http://127.0.0.1:8080 httpbin.org/ip

Reverse Proxy

The client directly requests http://127.0.0.1:8080.

This mode is suitable for scenarios where client cannot set a proxy.

$ proxyfor https://httpbin.org
$ curl http://127.0.0.1:8080/ip

Command Line

Usage: proxyfor [OPTIONS] [URL]

Arguments:
  [URL]  Reverse proxy url

Options:
  -l, --listen <ADDR>         Listening ip and port address [default: 0.0.0.0:8080]
  -f, --filters <REGEX>       Only inspect http(s) traffic whose `{method} {uri}` matches the regex
  -m, --mime-filters <VALUE>  Only inspect http(s) traffic whose content-type matches the value
  -W, --web                   Enable user-friendly web interface
  -T, --tui                   Eenter TUI
  -D, --dump                  Dump all traffics
  -h, --help                  Print help
  -V, --version               Print version

Choosing User Interface

You can select different interfaces with the following commands:

proxyfor                   # Enter TUI
proxyfor --web             # Serve WebUI
proxyfor --dump            # Dump all traffics
proxyfor --web --tui       # Serve WebUI + Enter TUI
proxyfor --web --dump      # Serve WebUI + Dump all traffics
proxyfor > proxyfor.md     # Dump all traffics to markdown file

Changing IP and Port

You can specify different listening addresses:

proxyfor -l 18080
proxyfor -l 127.0.0.1
proxyfor -l 127.0.0.1:18080

Filtering Traffic

Filter traffic by setting method and URI:

proxyfor -f httpbin.org/ip -f httpbin.org/anything
proxyfor -f '/^(get|post) https:\/\/httpbin.org/'       

Filter traffic based on content type:

proxyfor -m application/json -m application/ld+json
proxyfor -m text/

CA Certificates

Proxyfor can decrypt encrypted traffic on the fly, as long as the client trusts proxyfor’s built-in certificate authority. Usually this means that the proxyfor CA certificate has to be installed on the client device.

By far the easiest way to install the proxyfor CA certificate is to use the built-in certificate installation app. To do this, start proxyfor and configure your target device with the correct proxy settings. Now start a browser on the device, and visit the magic domain proxyfor.local.

proxyfor.local

License

Copyright (c) 2024-∞ proxyfor-developers.

Proxyfor is made available under the terms of either the MIT License or the Apache License 2.0, at your option.

See the LICENSE-APACHE and LICENSE-MIT files for license details.