This commit is contained in:
xvzc 2022-05-13 18:49:05 +09:00
parent 45fcca92e0
commit efbfddebc2
7 changed files with 75 additions and 33 deletions

View File

@ -13,11 +13,15 @@ import (
const BUF_SIZE = 1024 const BUF_SIZE = 1024
type Conn struct { type Conn struct {
conn net.Conn conn *net.TCPConn
} }
func (c *Conn) CloseWrite() { func (c *Conn) CloseWrite() {
c.conn.(*net.TCPConn).CloseWrite() c.conn.CloseWrite()
}
func (c *Conn) CloseRead() {
c.conn.CloseRead()
} }
func (c *Conn) Close() { func (c *Conn) Close() {
@ -51,7 +55,7 @@ func (c *Conn) SetDeadLine(t time.Time) (error) {
} }
func (c *Conn) SetKeepAlive(b bool) (error) { func (c *Conn) SetKeepAlive(b bool) (error) {
c.conn.(*net.TCPConn).SetKeepAlive(b) c.conn.SetKeepAlive(b)
return nil return nil
} }
@ -95,6 +99,8 @@ func (conn *Conn) ReadBytes() ([]byte, error) {
func (lConn *Conn) HandleHttp(p *packet.HttpPacket) { func (lConn *Conn) HandleHttp(p *packet.HttpPacket) {
defer func() { defer func() {
lConn.CloseRead()
lConn.CloseWrite()
lConn.Close() lConn.Close()
log.Debug("[HTTP] Closing client Connection.. ", lConn.RemoteAddr()) log.Debug("[HTTP] Closing client Connection.. ", lConn.RemoteAddr())
}() }()
@ -111,19 +117,21 @@ func (lConn *Conn) HandleHttp(p *packet.HttpPacket) {
log.Debug("[DOH] Found ", ip, " with ", p.Domain()) log.Debug("[DOH] Found ", ip, " with ", p.Domain())
// Create connection to server // Create connection to server
var port = ":80" var port = "80"
if p.Port() != "" { if p.Port() != "" {
port = ":" + p.Port() port = p.Port()
} }
rConn, err := Dial("tcp", ip + port) rConn, err := DialTCP("tcp", ip, port)
if err != nil { if err != nil {
log.Debug("[HTTP] ", err) log.Debug("[HTTP] ", err)
return return
} }
defer func() { defer func() {
defer rConn.Close() rConn.CloseRead()
rConn.CloseWrite()
rConn.Close()
log.Debug("[HTTP] Closing server Connection.. ", p.Domain(), " ", rConn.LocalAddr()) log.Debug("[HTTP] Closing server Connection.. ", p.Domain(), " ", rConn.LocalAddr())
}() }()
@ -144,6 +152,8 @@ func (lConn *Conn) HandleHttp(p *packet.HttpPacket) {
func (lConn *Conn) HandleHttps(p *packet.HttpPacket) { func (lConn *Conn) HandleHttps(p *packet.HttpPacket) {
defer func() { defer func() {
lConn.CloseRead()
lConn.CloseWrite()
lConn.Close() lConn.Close()
log.Debug("[HTTPS] Closing client Connection.. ", lConn.RemoteAddr()) log.Debug("[HTTPS] Closing client Connection.. ", lConn.RemoteAddr())
}() }()
@ -158,19 +168,21 @@ func (lConn *Conn) HandleHttps(p *packet.HttpPacket) {
log.Debug("[DOH] Found ", ip, " with ", p.Domain()) log.Debug("[DOH] Found ", ip, " with ", p.Domain())
// Create a connection to the requested server // Create a connection to the requested server
var port = ":443" var port = "443"
if p.Port() != "" { if p.Port() != "" {
port = ":" + p.Port() port = p.Port()
} }
rConn, err := Dial("tcp", ip + port) rConn, err := DialTCP("tcp4", ip, port)
if err != nil { if err != nil {
log.Debug("[HTTPS] ", err) log.Debug("[HTTPS] ", err)
return return
} }
defer func() { defer func() {
defer rConn.Close() rConn.CloseRead()
rConn.CloseWrite()
rConn.Close()
log.Debug("[HTTPS] Closing server Connection.. ", p.Domain(), " ", rConn.LocalAddr()) log.Debug("[HTTPS] Closing server Connection.. ", p.Domain(), " ", rConn.LocalAddr())
}() }()

View File

@ -2,10 +2,11 @@ package net
import ( import (
"net" "net"
"strconv"
) )
func Listen(network, address string) (Listener, error) { func ListenTCP(network string, addr *TCPAddr) (Listener, error) {
l, err := net.Listen(network, address) l, err := net.ListenTCP(network, addr.Addr)
if err != nil { if err != nil {
return Listener{}, err return Listener{}, err
} }
@ -13,8 +14,15 @@ func Listen(network, address string) (Listener, error) {
return Listener{listener: l}, nil return Listener{listener: l}, nil
} }
func Dial(network, address string) (*Conn, error) { func DialTCP(network string, ip string, port string) (*Conn, error) {
conn, err := net.Dial(network, address) p, _ := strconv.Atoi(port)
addr := &net.TCPAddr{
IP: net.ParseIP(ip),
Port: p,
}
conn, err := net.DialTCP(network, nil, addr)
if err != nil { if err != nil {
return &Conn{}, err return &Conn{}, err
} }

View File

@ -5,14 +5,14 @@ import (
) )
type Listener struct { type Listener struct {
listener net.Listener listener *net.TCPListener
} }
func (l *Listener) Accept() (Conn, error) { func (l *Listener) Accept() (*Conn, error) {
conn, err := l.listener.Accept() conn, err := l.listener.AcceptTCP()
if err != nil { if err != nil {
return Conn{}, err return &Conn{}, err
} }
return Conn{conn: conn}, nil return &Conn{conn: conn}, nil
} }

21
net/tcp.go Normal file
View File

@ -0,0 +1,21 @@
package net
import (
"net"
)
type TCPAddr struct {
Addr *net.TCPAddr
}
func TcpAddr(ip string, port int) (*TCPAddr) {
addr := &net.TCPAddr {
IP: net.ParseIP(ip),
Port: port,
}
return &TCPAddr{
Addr: addr,
}
}

View File

@ -9,27 +9,27 @@ import (
) )
type Proxy struct { type Proxy struct {
port string
addr string addr string
port int
} }
func New(addr string, port string) *Proxy { func New(addr string, port int) *Proxy {
return &Proxy{ return &Proxy{
addr: addr, addr: addr,
port: port, port: port,
} }
} }
func (p *Proxy) TcpAddr() string { func (p *Proxy) TcpAddr() *net.TCPAddr {
return p.addr + ":" + p.port return net.TcpAddr(p.addr, p.port)
} }
func (p *Proxy) Port() string { func (p *Proxy) Port() int {
return p.port return p.port
} }
func (p *Proxy) Start() { func (p *Proxy) Start() {
l, err := net.Listen("tcp", p.TcpAddr()) l, err := net.ListenTCP("tcp4", p.TcpAddr())
if err != nil { if err != nil {
log.Fatal("Error creating listener: ", err) log.Fatal("Error creating listener: ", err)
os.Exit(1) os.Exit(1)

View File

@ -1,12 +1,13 @@
package util package util
import ( import (
"fmt"
"os/exec" "os/exec"
"runtime" "runtime"
"strings" "strings"
) )
func SetOsProxy(port string) error { func SetOsProxy(port int) error {
if runtime.GOOS != "darwin" { if runtime.GOOS != "darwin" {
return nil return nil
} }
@ -17,12 +18,12 @@ func SetOsProxy(port string) error {
return err return err
} }
_, err = exec.Command("sh", "-c", "networksetup -setwebproxy "+ "'" +strings.TrimSpace(string(network)) + "'" + " 127.0.0.1 "+port).Output() _, err = exec.Command("sh", "-c", "networksetup -setwebproxy "+ "'" +strings.TrimSpace(string(network)) + "'" + " 127.0.0.1 "+ fmt.Sprint(port)).Output()
if err != nil { if err != nil {
return err return err
} }
_, err = exec.Command("sh", "-c", "networksetup -setsecurewebproxy " + "'" + strings.TrimSpace(string(network))+"'" + " 127.0.0.1 "+port).Output() _, err = exec.Command("sh", "-c", "networksetup -setsecurewebproxy " + "'" + strings.TrimSpace(string(network))+"'" + " 127.0.0.1 "+ fmt.Sprint(port)).Output()
if err != nil { if err != nil {
return err return err
} }

View File

@ -7,9 +7,9 @@ import (
"github.com/pterm/pterm" "github.com/pterm/pterm"
) )
func ParseArgs() (string,string, string, bool) { func ParseArgs() (string, int, string, bool) {
addr := flag.String("addr", "127.0.0.1", "Listen addr") addr := flag.String("addr", "127.0.0.1", "Listen addr")
port := flag.String("port", "8080", "port") port := flag.Int("port", 8080, "port")
dns := flag.String("dns", "8.8.8.8", "DNS server") dns := flag.String("dns", "8.8.8.8", "DNS server")
debug := flag.Bool("debug", false, "true | false") debug := flag.Bool("debug", false, "true | false")
@ -18,14 +18,14 @@ func ParseArgs() (string,string, string, bool) {
return *addr, *port, *dns, *debug return *addr, *port, *dns, *debug
} }
func PrintWelcome(addr, port string, dns string, debug bool) { func PrintWelcome(addr string, port int, dns string, debug bool) {
cyan := pterm.NewLettersFromStringWithStyle("Spoof", pterm.NewStyle(pterm.FgCyan)) cyan := pterm.NewLettersFromStringWithStyle("Spoof", pterm.NewStyle(pterm.FgCyan))
purple := pterm.NewLettersFromStringWithStyle("DPI", pterm.NewStyle(pterm.FgLightMagenta)) purple := pterm.NewLettersFromStringWithStyle("DPI", pterm.NewStyle(pterm.FgLightMagenta))
pterm.DefaultBigText.WithLetters(cyan, purple).Render() pterm.DefaultBigText.WithLetters(cyan, purple).Render()
pterm.DefaultBulletList.WithItems([]pterm.BulletListItem{ pterm.DefaultBulletList.WithItems([]pterm.BulletListItem{
{Level: 0, Text: "ADDR : " + addr}, {Level: 0, Text: "ADDR : " + addr},
{Level: 0, Text: "PORT : " + port}, {Level: 0, Text: "PORT : " + fmt.Sprint(port)},
{Level: 0, Text: "DNS : " + dns}, {Level: 0, Text: "DNS : " + dns},
{Level: 0, Text: "DEBUG : " + fmt.Sprint(debug)}, {Level: 0, Text: "DEBUG : " + fmt.Sprint(debug)},
}).Render() }).Render()