srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/mitmuxd/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/mitmuxd/main.go')
-rw-r--r--cmd/mitmuxd/main.go22
1 files changed, 19 insertions, 3 deletions
diff --git a/cmd/mitmuxd/main.go b/cmd/mitmuxd/main.go
index 9c77516..baaba85 100644
--- a/cmd/mitmuxd/main.go
+++ b/cmd/mitmuxd/main.go
@@ -14,6 +14,7 @@ import (
"os/signal"
"path/filepath"
"runtime"
+ "strings"
"syscall"
"time"
@@ -24,13 +25,25 @@ import (
)
func main() {
- listen := flag.String("listen", "127.0.0.1:8080", "proxy listen address")
+ listen := flag.String("listen", "127.0.0.1:8080", "proxy listen address(es) - comma-separated for more than one, e.g. \"127.0.0.1:8080,127.0.0.1:8081\"")
caDir := flag.String("ca-dir", "", "directory for CA cert/key and history db (default: XDG config dir)")
dbPath := flag.String("db", "", "path to history database (default: <ca-dir>/history.db)")
socketPath := flag.String("socket", "", "control socket path (default: $XDG_RUNTIME_DIR/mitmux.sock, else <ca-dir>/mitmux.sock)")
installCA := flag.Bool("install-ca", false, "generate the CA if needed, print OS-specific trust-store install steps, and exit (doesn't start the proxy)")
+ upstreamProxy := flag.String("upstream-proxy", "", "chain all outbound connections through this HTTP CONNECT proxy (host:port, optional http:// prefix) instead of dialing origins directly")
flag.Parse()
+ var listenAddrs []string
+ for _, a := range strings.Split(*listen, ",") {
+ if a = strings.TrimSpace(a); a != "" {
+ listenAddrs = append(listenAddrs, a)
+ }
+ }
+ if len(listenAddrs) == 0 {
+ log.Fatalf("-listen: no addresses given")
+ }
+ upstream := strings.TrimPrefix(strings.TrimSpace(*upstreamProxy), "http://")
+
dir := *caDir
if dir == "" {
d, err := ca.Dir()
@@ -80,11 +93,14 @@ func main() {
defer os.Remove(sockFile)
log.Printf("control socket: %s", sockFile)
- srv := proxy.New(*listen, root, db)
+ srv := proxy.New(listenAddrs, root, db, upstream)
+ if upstream != "" {
+ log.Printf("chaining outbound connections through upstream proxy %s", upstream)
+ }
hub := ipc.NewHub()
srv.OnEntry = ipc.LogAndBroadcast(hub)
- ipcSrv := ipc.NewServer(db, hub, srv, *listen)
+ ipcSrv := ipc.NewServer(db, hub, srv, strings.Join(listenAddrs, ", "))
go func() {
if err := ipcSrv.Serve(sockLn); err != nil {
log.Printf("control socket: %v", err)