Skip to content

Instantly share code, notes, and snippets.

@andig
Last active March 27, 2021 14:04
Show Gist options
  • Save andig/604080b2996c84c3ea584eb0af1c0eb2 to your computer and use it in GitHub Desktop.
Save andig/604080b2996c84c3ea584eb0af1c0eb2 to your computer and use it in GitHub Desktop.
package main
import (
"context"
"fmt"
"log"
"net"
"net/http"
"net/url"
"time"
"github.com/elazarl/goproxy"
chclient "github.com/jpillora/chisel/client"
chserver "github.com/jpillora/chisel/server"
)
const (
serverHost = "localhost"
serverPort = "8080"
serverProxy = "8090"
clientProxy = "9090"
)
func main() {
serverCfg := chserver.Config{
Reverse: true,
KeySeed: "w9Bekn30tbQoyZsJfSLsbLsI7A4ctfDHqUKwTEdoATI=",
}
srv, err := chserver.NewServer(&serverCfg)
if err != nil {
log.Fatal(err)
}
err = srv.Start(serverHost, serverPort)
if err != nil {
log.Fatal(err)
}
proxyRemote := fmt.Sprintf("R:%s:localhost:%s", serverProxy, clientProxy)
clientCfg := chclient.Config{
Server: net.JoinHostPort(serverHost, serverPort),
Fingerprint: "OhVC/whI4WGsM6RCDzrz53ZHUdtlX7u016FALqvpaWE=",
Remotes: []string{proxyRemote},
}
client, err := chclient.NewClient(&clientCfg)
if err != nil {
log.Fatal(err)
}
err = client.Start(context.Background())
if err != nil {
log.Fatal(err)
}
go func() {
proxy := goproxy.NewProxyHttpServer()
log.Fatal(http.ListenAndServe(":"+clientProxy, proxy))
}()
time.Sleep(time.Second)
proxyString := "http://localhost:" + serverProxy
proxyUrl, _ := url.Parse(proxyString)
hc := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
},
}
fmt.Println(hc.Get("https://heise.de"))
time.Sleep(10 * time.Second)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment