This commit is contained in:
kony
2025-03-28 18:50:19 +08:00
parent c7bc4b9c4f
commit 646df4dccc
3 changed files with 34 additions and 82 deletions

View File

@@ -49,18 +49,18 @@ func NewTcpForwarder(s *stack.Stack, stun_quic_conn quic.Connection) *tcp.Forwar
r.Complete(true) // 拒绝连接
return
}
/*
log.Printf("forward tcp request: %s:%d->%s:%d",
id.RemoteAddress, id.RemotePort, id.LocalAddress, id.LocalPort)
log.Printf("forward tcp request: %s:%d->%s:%d",
id.RemoteAddress, id.RemotePort, id.LocalAddress, id.LocalPort)
// 延迟处理错误日志
defer func() {
if err != nil {
log.Printf("forward tcp request: %s:%d->%s:%d: %s",
id.RemoteAddress, id.RemotePort, id.LocalAddress, id.LocalPort, err)
}
}()
// 延迟处理错误日志
defer func() {
if err != nil {
log.Printf("forward tcp request: %s:%d->%s:%d: %s",
id.RemoteAddress, id.RemotePort, id.LocalAddress, id.LocalPort, err)
}
}()
*/
// 执行TCP三次握手
ep, err = r.CreateEndpoint(&wq)
if err != nil {

View File

@@ -188,7 +188,6 @@ func RunLocal(tun_key string) error {
netstack.SetForWarder(quic_conn)
utils.Log().DebugF("对端IP: %s", netstack.GetRemoteIP())
log.Printf("对端IP: %s", netstack.GetRemoteIP())
m_local_state = 2
tun.ProcessHealth(health)

View File

@@ -7,33 +7,18 @@ import (
pool2 "goodlink/pool"
"goodlink/socks5"
"goodlink/utils"
"io"
"log"
"net"
"github.com/quic-go/quic-go"
)
func ProcessProxyServer_Quic(remote_addr string, stun_quic_conn quic.Connection) {
func ProcessProxyServer(stun_quic_conn quic.Connection) {
head_len := 2
buf := pool2.Malloc(head_len)
defer pool2.Free(buf)
log.Printf("转发地址: %s", remote_addr)
for {
new_quic_stream, err := stun_quic_conn.AcceptStream(context.Background())
if err == nil {
new_tcp_conn, err := net.Dial("tcp", remote_addr)
if err == nil {
go ForwardT2Q(new_tcp_conn, new_quic_stream, stun_quic_conn)
go ForwardQ2T(new_quic_stream, new_tcp_conn, stun_quic_conn)
continue
}
break
}
break
}
}
func ProcessProxyServer_Socks5(remote_addr string, stun_quic_conn quic.Connection) {
// Create a SOCKS5 server
socks5_svr, err := socks5.New(&socks5.Config{})
if err != nil {
utils.Log().DebugF("代理模式: %v\n", err)
@@ -41,22 +26,6 @@ func ProcessProxyServer_Socks5(remote_addr string, stun_quic_conn quic.Connectio
}
log.Println("开启代理模式")
defer log.Println("退出代理模式")
for {
new_quic_stream, err := stun_quic_conn.AcceptStream(context.Background())
if err == nil {
go socks5_svr.ServeConnQuic(new_quic_stream, stun_quic_conn.RemoteAddr().(*net.UDPAddr).IP, stun_quic_conn.RemoteAddr().(*net.UDPAddr).Port)
continue
}
break
}
}
func ProcessProxyServer(stun_quic_conn quic.Connection) {
buf := pool2.Malloc(1500)
defer pool2.Free(buf)
for {
fewfgwegwe:
new_quic_stream, err := stun_quic_conn.AcceptStream(context.Background())
@@ -64,43 +33,27 @@ func ProcessProxyServer(stun_quic_conn quic.Connection) {
continue
}
head_len := 2
buf_len := 0
for buf_len < head_len {
log.Printf("读取头部: %d/%d", buf_len, head_len)
buf_len2, err := new_quic_stream.Read(buf[buf_len:])
if err != nil {
log.Println("读取头部失败", err)
new_quic_stream.Close()
goto fewfgwegwe
}
buf_len += buf_len2
_, err = io.ReadFull(new_quic_stream, buf[:head_len])
if err != nil {
log.Println("read quic head: ", err)
new_quic_stream.Close()
goto fewfgwegwe
}
remotePort := binary.BigEndian.Uint16(buf[:head_len])
remoteAddr := fmt.Sprintf("127.0.0.1:%d", remotePort)
log.Printf("转发地址: %s", remoteAddr)
new_tcp_conn, err := net.Dial("tcp", remoteAddr)
if err == nil {
if buf_len > head_len {
new_tcp_conn.Write(buf[head_len:buf_len])
switch remotePort {
case 1080:
go func() {
remoteAddr := stun_quic_conn.RemoteAddr().(*net.UDPAddr)
socks5_svr.ServeConnQuic(new_quic_stream, remoteAddr.IP, remoteAddr.Port)
}()
default:
remoteAddr := fmt.Sprintf("127.0.0.1:%d", remotePort)
new_tcp_conn, err := net.Dial("tcp", remoteAddr)
if err == nil {
go ForwardT2Q(new_tcp_conn, new_quic_stream, stun_quic_conn)
go ForwardQ2T(new_quic_stream, new_tcp_conn, stun_quic_conn)
}
go ForwardT2Q(new_tcp_conn, new_quic_stream, stun_quic_conn)
go ForwardQ2T(new_quic_stream, new_tcp_conn, stun_quic_conn)
continue
}
}
}
func ProcessProxyServer2(remote_addr string, stun_quic_conn quic.Connection) {
if stun_quic_conn == nil {
log.Println(" 隧道建立失败!")
return
}
switch len(remote_addr) {
case 0:
ProcessProxyServer_Socks5(remote_addr, stun_quic_conn)
default:
ProcessProxyServer_Quic(remote_addr, stun_quic_conn)
}
}