mirror of
https://gitee.com/konyshe/goodlink.git
synced 2025-09-26 20:51:22 +08:00
U
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user