Skip to content
This repository has been archived by the owner on Jul 12, 2024. It is now read-only.

Commit

Permalink
Changed kernel to Clash.Meta kernel (changed by KinnerFisch)
Browse files Browse the repository at this point in the history
  • Loading branch information
KinnerFisch committed Jul 28, 2023
1 parent 6e43c9c commit 1414901
Show file tree
Hide file tree
Showing 3 changed files with 329 additions and 151 deletions.
162 changes: 17 additions & 145 deletions fulltclash.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import (

var (
controlport string
proxyport string
proxyport string
)

func init() {
Expand Down Expand Up @@ -212,22 +212,22 @@ func myURLTest(pingURL string, index int) uint16 {
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
delay, meanDelay, err := proxy.URLTest(ctx, pingURL)
delay, err := proxy.URLTest(ctx, pingURL, nil, 0)
if ctx.Err() != nil {
return 0
}

if err != nil || delay == 0 {
fmt.Printf("error: %s \n", err.Error())
return meanDelay
return delay
}
return meanDelay
return delay
}

func startclashMixed2(rawaddr string, index int) {
addr := rawaddr
tcpQueue := make(chan constant.ConnContext, 256)
udpQueue := make(chan *inbound.PacketAdapter, 32)
udpQueue := make(chan constant.PacketAdapter, 32)
mixedListener, mixedUDPLister := ReCreateMixed(addr, tcpQueue, udpQueue, index)
defer mixedListener.Close()
defer mixedUDPLister.Close()
Expand All @@ -239,7 +239,11 @@ func startclashMixed2(rawaddr string, index int) {
for i := 0; i < numUDPWorkers; i++ {
go func() {
for conn1 := range udpQueue {
handleUDPConn(conn1, index)
if conn, ok := conn1.(*inbound.PacketAdapter); ok {
handleUDPConn(conn, index)
} else {
fmt.Println("Failed to convert conn1 to *inbound.PacketAdapter")
}
}
}()
}
Expand All @@ -248,7 +252,7 @@ func startclashMixed2(rawaddr string, index int) {
go handleTCPConn(conn2, index)
}
}
func ReCreateMixed(rawaddr string, tcpIn chan<- constant.ConnContext, udpIn chan<- *inbound.PacketAdapter, index int) (*mixed.Listener, *socks.UDPListener) {
func ReCreateMixed(rawaddr string, tcpIn chan<- constant.ConnContext, udpIn chan<- constant.PacketAdapter, index int) (*mixed.Listener, *socks.UDPListener) {
addr := rawaddr
mixedMux.Lock()
defer mixedMux.Unlock()
Expand Down Expand Up @@ -286,8 +290,7 @@ func handleUDPConn(packet *inbound.PacketAdapter, index int) {
// make a fAddr if request ip is fakeip
var fAddr netip.Addr
if resolver.IsExistFakeIP(metadata.DstIP) {
fAddr, _ = netip.AddrFromSlice(metadata.DstIP)
fAddr = fAddr.Unmap()
fAddr = metadata.DstIP.Unmap()
}

// local resolve UDP dns
Expand All @@ -304,7 +307,7 @@ func handleUDPConn(packet *inbound.PacketAdapter, index int) {
key := packet.LocalAddr().String()

handle := func() bool {
pc := natTable.Get(key)
pc, _ := natTable.Get(key)
if pc != nil {
err := handleUDPToRemote(packet, pc, metadata)
if err != nil {
Expand Down Expand Up @@ -358,13 +361,12 @@ func handleUDPConn(packet *inbound.PacketAdapter, index int) {
return
}
pCtx.InjectPacketConn(rawPc)
pc := statistic.NewUDPTracker(rawPc, statistic.DefaultManager, metadata, nil)
pc := statistic.NewUDPTracker(rawPc, statistic.DefaultManager, metadata, nil, 0, 0, false)

oAddr, _ := netip.AddrFromSlice(metadata.DstIP)
oAddr = oAddr.Unmap()
oAddr := metadata.DstIP.Unmap()
go handleUDPToLocal(packet.UDPPacket, pc, key, oAddr, fAddr)

natTable.Set(key, pc)
natTable.Set(key, pc, nil)
handle()
}()
}
Expand Down Expand Up @@ -471,134 +473,4 @@ func setProxy(tempconf *RawConfig2) {
}
rawcfgs[tempconf.Index] = &RawConfig{Proxy: tempconf.Proxy}
log.Printf("set proxy success! index: %d\n", tempconf.Index)
}

////export urlTest
//func urlTest(rawurl *C.char, index int, timeout int) (uint16, uint16, error) {
// ctx := context.Background()
// newurl := C.GoString(rawurl)
// proxy, err := adapter.ParseProxy(rawcfgs[index].Proxy)
//
// if err != nil {
// return 0, 0, err
// }
//
// addr, err := urlToMetadata(newurl)
// if err != nil {
// return 0, 0, err
// }
//
// instance, err := proxy.DialContext(ctx, &addr)
// if err != nil {
// return 0, 0, err
// }
// defer instance.Close()
//
// transport := &http.Transport{
// DialContext: func(ctx context.Context, network string, addr string) (net.Conn, error) { return instance, nil },
// //Dial: func(network, addr string) (net.Conn, error) { return instance, nil },
// // from http.DefaultTransport
// MaxIdleConns: 100,
// IdleConnTimeout: 3 * time.Second,
// TLSHandshakeTimeout: time.Duration(timeout) * time.Second,
// ExpectContinueTimeout: 1 * time.Second,
// TLSClientConfig: &tls.Config{
// InsecureSkipVerify: false,
// // for version prior to tls1.3, the handshake will take 2-RTTs,
// // plus, majority server supports tls1.3, so we set a limit here
// MinVersion: tls.VersionTLS13,
// RootCAs: rootCAPrepare(),
// },
// }
//
// req, err := http.NewRequest("GET", newurl, nil)
// if err != nil {
// return 0, 0, err
// }
//
// tlsStart := int64(0)
// tlsEnd := int64(0)
// writeStart := int64(0)
// writeEnd := int64(0)
// trace := &httptrace.ClientTrace{
// TLSHandshakeStart: func() {
// tlsStart = time.Now().UnixMilli()
// },
// TLSHandshakeDone: func(cs tls.ConnectionState, err error) {
// tlsEnd = time.Now().UnixMilli()
// if err != nil {
// tlsEnd = 0
// }
// },
// GotFirstResponseByte: func() {
// writeEnd = time.Now().UnixMilli()
// },
// WroteHeaders: func() {
// writeStart = time.Now().UnixMilli()
// },
// }
// req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace))
//
// connStart := time.Now().UnixMilli()
// if resp, err := transport.RoundTrip(req); err != nil {
// return 0, 0, err
// } else {
// if !strings.HasPrefix(newurl, "https:") {
// return uint16(writeStart - connStart), uint16(writeEnd - connStart), nil
// }
// if resp.TLS != nil && resp.TLS.HandshakeComplete {
// connEnd := time.Now().UnixMilli()
// fmt.Printf("Urltest end. Name:%s, TimeStack:%d,%d,%d,%d\n", proxy.Name(), connEnd-writeEnd, writeEnd-tlsEnd, tlsEnd-tlsStart, tlsStart-connStart)
// // use payload rtt
// return uint16(writeEnd - tlsEnd), uint16(writeEnd - connStart), nil
// // return uint16(tlsEnd - tlsStart), uint16(writeEnd - connStart), nil
// }
// return 0, 0, fmt.Errorf("cannot extract payload from response")
// }
//}
//
////export urltestJson
//func urltestJson(url *C.char, index int, timeout int) *C.char {
// retMap := make(map[string]interface{})
// rtt, delay, err := urlTest(url, index, timeout)
// if err != nil {
//
// }
// retMap["rtt"] = rtt
// retMap["delay"] = delay
// retMap["err"] = err
// ret, _ := json.Marshal(retMap)
// return C.CString(string(ret))
//}

//func rootCAPrepare() *x509.CertPool {
// rootCAs := x509.NewCertPool()
// rootCAs.AppendCertsFromPEM(FullTClashRootCa)
// return rootCAs
//}
//func urlToMetadata(rawURL string) (addr constant.Metadata, err error) {
// u, err := url.Parse(rawURL)
// if err != nil {
// return
// }
//
// port := u.Port()
// if port == "" {
// switch u.Scheme {
// case "https":
// port = "443"
// case "http":
// port = "80"
// default:
// err = fmt.Errorf("%s scheme not Support", rawURL)
// return
// }
// }
//
// addr = constant.Metadata{
// Host: u.Hostname(),
// DstIP: nil,
// DstPort: port,
// }
// return
//}
}
82 changes: 76 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,88 @@ require (
)

require (
github.com/3andne/restls-client-go v0.1.4 // indirect
github.com/RyuaNerin/go-krypto v1.0.2 // indirect
github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344 // indirect
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/coreos/go-iptables v0.6.0 // indirect
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9 // indirect
github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 // indirect
github.com/ericlagergren/siv v0.0.0-20220507050439-0b757b3aa5f1 // indirect
github.com/ericlagergren/subtle v0.0.0-20220507045147-890d697da010 // indirect
github.com/go-chi/chi/v5 v5.0.8 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/gofrs/uuid/v5 v5.0.0 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/google/btree v1.0.1 // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/hashicorp/yamux v0.1.1 // indirect
github.com/insomniacslk/dhcp v0.0.0-20230307103557-e252950ab961 // indirect
github.com/josharian/native v1.1.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/klauspost/compress v1.15.15 // indirect
github.com/klauspost/cpuid/v2 v2.0.12 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect
github.com/mdlayher/netlink v1.7.2 // indirect
github.com/mdlayher/socket v0.4.1 // indirect
github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 // indirect
github.com/metacubex/gvisor v0.0.0-20230611153922-78842f086475 // indirect
github.com/metacubex/quic-go v0.35.2-0.20230603072621-ea2663348ebb // indirect
github.com/metacubex/sing-shadowsocks v0.2.2 // indirect
github.com/metacubex/sing-shadowsocks2 v0.1.0 // indirect
github.com/metacubex/sing-vmess v0.1.5 // indirect
github.com/metacubex/sing-wireguard v0.0.0-20230611155257-1498ae315a28 // indirect
github.com/miekg/dns v1.1.52 // indirect
github.com/mroth/weightedrand/v2 v2.0.1 // indirect
github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 // indirect
github.com/onsi/ginkgo/v2 v2.9.5 // indirect
github.com/openacid/low v0.1.21 // indirect
github.com/oschwald/geoip2-golang v1.9.0 // indirect
github.com/oschwald/maxminddb-golang v1.11.0 // indirect
github.com/pierrec/lz4/v4 v4.1.14 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/quic-go/qpack v0.4.0 // indirect
github.com/quic-go/qtls-go1-19 v0.3.2 // indirect
github.com/quic-go/qtls-go1-20 v0.2.2 // indirect
github.com/quic-go/quic-go v0.36.1 // indirect
github.com/sagernet/sing v0.2.9 // indirect
github.com/sagernet/sing-mux v0.1.2 // indirect
github.com/sagernet/sing-shadowtls v0.1.4 // indirect
github.com/sagernet/smux v0.0.0-20230312102458-337ec2a5af37 // indirect
github.com/sagernet/tfo-go v0.0.0-20230303015439-ffcfd8c41cf9 // indirect
github.com/sagernet/utls v0.0.0-20230309024959-6732c2ab36f2 // indirect
github.com/sagernet/wireguard-go v0.0.0-20230420044414-a7bac1754e77 // indirect
github.com/samber/lo v1.38.1 // indirect
github.com/shirou/gopsutil/v3 v3.23.6 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b // indirect
github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c // indirect
github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e // indirect
github.com/sirupsen/logrus v1.9.0 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
github.com/tklauser/numcpus v0.6.0 // indirect
github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect
github.com/xtls/go v0.0.0-20230107031059-4610f88d00f3 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
github.com/zhangyunhao116/fastrand v0.3.0 // indirect
gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect
go.etcd.io/bbolt v1.3.7 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/automaxprocs v1.5.2 // indirect
golang.org/x/crypto v0.7.0 // indirect
golang.org/x/mod v0.8.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/text v0.8.0 // indirect
golang.org/x/tools v0.6.0 // indirect
golang.org/x/crypto v0.11.0 // indirect
golang.org/x/exp v0.0.0-20221205204356-47842c84f3db // indirect
golang.org/x/mod v0.10.0 // indirect
golang.org/x/net v0.12.0 // indirect
golang.org/x/sync v0.3.0 // indirect
golang.org/x/sys v0.10.0 // indirect
golang.org/x/text v0.11.0 // indirect
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
golang.org/x/tools v0.9.1 // indirect
google.golang.org/protobuf v1.31.0 // indirect
lukechampine.com/blake3 v1.2.1 // indirect
)
Loading

0 comments on commit 1414901

Please sign in to comment.