feat: pass unimportant ua

This commit is contained in:
SunBK201 2023-12-15 01:26:42 +08:00
parent f4c1ca0a66
commit 39ca66f621
6 changed files with 83 additions and 13 deletions

View File

@ -1,7 +1,7 @@
#!/bin/sh
project_name="ua3f"
release_version="0.1.2"
release_version="0.1.3"
target=cmd/ua3f.go
release_dir=./bin

View File

@ -1,7 +1,7 @@
---
#--------------------------------------------------------------------------------------#
# Written by SunBK201
# https://github.com/SunBK201/MyProfiles
# https://github.com/SunBK201/UA3F
#--------------------------------------------------------------------------------------#
# Port of HTTP(S) proxy server on the local end
port: 7890

View File

@ -7,6 +7,7 @@ import (
"fmt"
"io"
"net"
"slices"
"strings"
"time"
"ua3f/http"
@ -16,12 +17,26 @@ import (
"github.com/sirupsen/logrus"
)
var version = "0.1.2"
var version = "0.1.3"
var payloadByte []byte
var cache *expirable.LRU[string, string]
func main() {
var whitelist = []string{
"MicroMessenger Client",
"ByteDancePcdn",
"Go-http-client/1.1",
}
// var dpool *ants.PoolWithFunc
// var gpool *ants.PoolWithFunc
//
// type RelayConn struct {
// src net.Conn
// dst net.Conn
// destAddrPort string
// }
func main() {
var payload string
var addr string
var port int
@ -40,7 +55,12 @@ func main() {
logrus.Info(fmt.Sprintf("User-Agent: %s", payload))
logrus.Info(fmt.Sprintf("Log level: %s", loglevel))
cache = expirable.NewLRU[string, string](100, nil, time.Second*600)
cache = expirable.NewLRU[string, string](300, nil, time.Second*600)
// dpool, _ = ants.NewPoolWithFunc(1000, forward)
// gpool, _ = ants.NewPoolWithFunc(500, gforward)
// defer dpool.Release()
// defer gpool.Release()
payloadByte = []byte(payload)
@ -74,6 +94,7 @@ func process(client net.Conn) {
return
}
Socks5Forward(client, target, destAddrPort)
// Socks5Relay(client, target, destAddrPort)
}
func Socks5Auth(client net.Conn) (err error) {
@ -151,6 +172,39 @@ func Socks5Connect(client net.Conn) (net.Conn, string, error) {
return dest, destAddrPort, nil
}
/*
func forward(i interface{}) {
rc := i.(*RelayConn)
defer rc.src.Close()
defer rc.dst.Close()
io.Copy(rc.src, rc.dst)
}
func gforward(i interface{}) {
rc := i.(*RelayConn)
defer rc.dst.Close()
defer rc.src.Close()
CopyPileline(rc.dst, rc.src, rc.destAddrPort)
}
func Socks5Relay(client, target net.Conn, destAddrPort string) {
rc := &RelayConn{
src: client,
dst: target,
destAddrPort: destAddrPort,
}
logrus.Debug(fmt.Sprintf("dpool: %d left: %d, gpool: %d left: %d", dpool.Running(), dpool.Free(), gpool.Running(), gpool.Free()))
dpool.Invoke(rc)
if cache.Contains(destAddrPort) {
logrus.Debug(fmt.Sprintf("Hit LRU Relay Cache: %s", destAddrPort))
rc.src, rc.dst = rc.dst, rc.src
dpool.Invoke(rc)
} else {
gpool.Invoke(rc)
}
}
*/
func Socks5Forward(client, target net.Conn, destAddrPort string) {
forward := func(src, dest net.Conn) {
defer src.Close()
@ -168,9 +222,9 @@ func Socks5Forward(client, target net.Conn, destAddrPort string) {
if cache.Contains(destAddrPort) {
logrus.Debug(fmt.Sprintf("Hit LRU Relay Cache: %s", destAddrPort))
go forward(target, client)
return
} else {
go gforward(target, client)
}
go gforward(target, client)
}
func CopyPileline(dst io.Writer, src io.Reader, destAddrPort string) {
@ -203,7 +257,7 @@ func CopyPileline(dst io.Writer, src io.Reader, destAddrPort string) {
dst.Write(buf[0:nr])
io.Copy(dst, src)
cache.Add(destAddrPort, destAddrPort)
logrus.Debug(fmt.Sprintf("Not HTTP, Hint: %v, Add LRU Relay Cache: %s", buf[0:7], destAddrPort))
logrus.Debug(fmt.Sprintf("Not HTTP, Hint: %v, Add LRU Relay Cache: %s, Cache Len: %d", buf[0:7], destAddrPort, cache.Len()))
return
}
for {
@ -221,6 +275,13 @@ func CopyPileline(dst io.Writer, src io.Reader, destAddrPort string) {
}
value, start, end := parser.FindHeader([]byte("User-Agent"))
if value != nil && end > start {
if slices.Contains(whitelist, string(value)) {
logrus.Debug(fmt.Sprintf("[%s][%s] Hit User-Agent Whitelist: %s, Add LRU Relay Cache, Cache Len: %d", destAddrPort, src.(*net.TCPConn).RemoteAddr().String(), string(value), cache.Len()))
dst.Write(buf[0:nr])
io.Copy(dst, src)
cache.Add(destAddrPort, destAddrPort)
return
}
logrus.Debug(fmt.Sprintf("[%s][%s] Hit User-Agent: %s", destAddrPort, src.(*net.TCPConn).RemoteAddr().String(), string(value)))
for i := start; i < end; i++ {
buf[i] = 32
@ -232,7 +293,7 @@ func CopyPileline(dst io.Writer, src io.Reader, destAddrPort string) {
buf[start+i] = payloadByte[i]
}
} else {
logrus.Debug(fmt.Sprintf("[%s] Not found User-Agent, Add LRU Relay Cache", destAddrPort))
logrus.Debug(fmt.Sprintf("[%s] Not found User-Agent, Add LRU Relay Cache, Cache Len: %d", destAddrPort, cache.Len()))
dst.Write(buf[0:nr])
io.Copy(dst, src)
cache.Add(destAddrPort, destAddrPort)

5
go.mod
View File

@ -7,4 +7,7 @@ require (
github.com/sirupsen/logrus v1.9.3
)
require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
require (
github.com/stretchr/testify v1.8.2 // indirect
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
)

10
go.sum
View File

@ -8,10 +8,16 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@ -16,7 +16,7 @@ getcpucore() {
cd /root
getcpucore
version=0.1.2
version=0.1.3
ua3f_tar=ua3f-$version-$cpucore.tar.gz
if id -u shellclash &> /dev/null; then