MCPcopy Index your code
hub / github.com/alexkirsz/dispatch

github.com/alexkirsz/dispatch @v0.2.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.4 ↗ · + Follow
59 symbols 106 edges 8 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

dispatch

A SOCKS proxy that balances traffic between network interfaces.

Works on macOS, Windows, and Linux.

This is a Rust rewrite of dispatch-proxy, originally written in CoffeeScript and targeting Node.js.

Quick links

Installation

From pre-built binaries

You can download pre-built binaries for macOS, Windows, and Linux from the releases page.

From crates.io

You'll need Rust version 1.51.0 or later. You can use rustup to install the latest version of the Rust compiler toolchain.

cargo install dispatch-proxy

Rationale

You often find yourself with multiple unused internet connections—be it 5G mobile hotspot or a free Wi-Fi network—that your system won't let you use alongside your primary one.

For instance, my first student residence used to provide me with cabled and wireless internet accesses. Both were separately capped at a bandwidth 1,200kB/s. My 3G mobile internet access provided me with an additional 400kB/s. Combining all of these with dispatch and a download manager resulted in a 2,800kB/s effective bandwidth!

Use cases

The possibilities are endless:

  • Use it with a download manager or a BitTorrent client, combining multiple connections' bandwidth when downloading single files;
  • Combine as many interfaces as you have access to into a single load-balanced interface;
  • Run different apps on separate interfaces with multiple proxies (e.g. for balancing download/upload);
  • Create a hotspot proxy at home that connects through Ethernet and your 5G card for all your mobile devices;
  • etc.

Usage

$ dispatch
A SOCKS proxy that balances traffic between network interfaces.

Usage: dispatch [OPTIONS] <COMMAND>

Commands:
  list   Lists all available network interfaces
  start  Starts the SOCKS proxy server
  help   Print this message or the help of the given subcommand(s)

Options:
  -d, --debug    Write debug logs to stdout instead of a file
  -h, --help     Print help
  -V, --version  Print version
$ dispatch start -h
Starts the SOCKS proxy server

Usage: dispatch start [OPTIONS] <ADDRESSES>...

Arguments:
  <ADDRESSES>...  The network interface IP addresses to dispatch to, in the form of <address>[/priority]

Options:
      --ip <IP>      Which IP to accept connections from [default: 127.0.0.1]
      --port <PORT>  Which port to listen to for connections [default: 1080]
  -h, --help         Print help

Examples

$ dispatch list

Lists all available network interfaces.

$ dispatch start 10.0.0.0 fdaa:bbcc:ddee:0:1:2:3:4

Dispatch incoming connections to local addresses 10.0.0.0 and fdaa:bbcc:ddee:0:1:2:3:4.

$ dispatch start 10.0.0.0/7 10.0.0.1/3

Dispatch incoming connections to 10.0.0.0 7 times out of 10 and to 10.0.0.1 3 times out of 10.

How It Works

Whenever the SOCKS proxy server receives an connection request to an address or domain, it selects one of the provided local addresses using the Weighted Round Robin algorithm. All further connection traffic will then go through the interface corresponding to the selected local address.

Beware: If the requested address or domain resolves to an IPv4 (resp. IPv6) address, an IPv4 (resp. IPv6) local address must be provided.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Extension points exported contracts — how you extend this code

Dispatch (Interface)
(no doc) [1 implementers]
src/dispatcher/mod.rs

Core symbols most depended-on inside this repo

as_str
called by 5
src/dispatcher/weighted_rr.rs
try_bind_socket
called by 2
src/socks.rs
lookup
called by 2
src/socks.rs
connect_error
called by 2
src/socks.rs
resolve_host_error
called by 2
src/socks.rs
safe_to_ignore_note
called by 2
src/socks.rs
init_tracing_subscriber_with_stdout
called by 2
src/debug.rs
pipe
called by 2
src/server.rs

Shape

Function 28
Method 17
Class 10
Enum 3
Interface 1

Languages

Rust100%

Modules by API surface

src/socks.rs23 symbols
src/dispatcher/weighted_rr.rs16 symbols
src/debug.rs7 symbols
src/server.rs5 symbols
src/net.rs3 symbols
src/main.rs3 symbols
src/list.rs1 symbols
src/dispatcher/mod.rs1 symbols

For agents

$ claude mcp add dispatch \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact