init
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
des "anytunnel/at-common/des"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/vulcand/oxy/forward"
|
||||
"github.com/vulcand/oxy/testutils"
|
||||
)
|
||||
|
||||
func main() {
|
||||
key := flag.String("k", "abcd1234", "encrypt or decrypt key")
|
||||
isEncrypt := flag.Bool("e", false, "encrypt text")
|
||||
isDecrypt := flag.Bool("d", false, "decrypt text")
|
||||
text := flag.String("t", "", "text to decrypt or encrypt")
|
||||
ip := flag.String("i", "", "ip to bind")
|
||||
port := flag.Int("p", 58080, "http port to listen")
|
||||
flag.Parse()
|
||||
if *isEncrypt {
|
||||
res, err := des.Encrypt([]byte(*text), *key)
|
||||
if err != nil {
|
||||
fmt.Printf("ERR:%s\n", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("%s\n", res)
|
||||
return
|
||||
}
|
||||
if *isDecrypt {
|
||||
res, err := des.Decrypt(*text, *key)
|
||||
if err != nil {
|
||||
fmt.Printf("ERR:%s\n", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("%s\n", res)
|
||||
return
|
||||
}
|
||||
logrus.SetLevel(logrus.FatalLevel)
|
||||
fwd, _ := forward.New()
|
||||
redirect := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||
_hostarr := strings.Split(req.Host, ".")
|
||||
if len(_hostarr) < 3 {
|
||||
w.WriteHeader(http.StatusForbidden)
|
||||
w.Write([]byte("Forbidden"))
|
||||
return
|
||||
}
|
||||
hostAndPort, err := des.Decrypt(_hostarr[0], *key)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusForbidden)
|
||||
w.Write([]byte("Forbidden"))
|
||||
return
|
||||
}
|
||||
hostAndPortArr := strings.Split(string(hostAndPort), ":")
|
||||
if len(hostAndPortArr) != 2 {
|
||||
w.WriteHeader(http.StatusForbidden)
|
||||
w.Write([]byte("Forbidden"))
|
||||
return
|
||||
}
|
||||
host := hostAndPortArr[0]
|
||||
if host == "" || host == "0.0.0.0" {
|
||||
host = "127.0.0.1"
|
||||
}
|
||||
req.URL = testutils.ParseURI(fmt.Sprintf("http://%s:%s/", host, hostAndPortArr[1]))
|
||||
fwd.ServeHTTP(w, req)
|
||||
|
||||
})
|
||||
s := &http.Server{
|
||||
Addr: fmt.Sprintf("%s:%d", *ip, *port),
|
||||
Handler: redirect,
|
||||
}
|
||||
log.Printf("http proxy on %s", s.Addr)
|
||||
log.Fatalf("ERR:%s", s.ListenAndServe())
|
||||
}
|
||||
Reference in New Issue
Block a user