Skip to content

Commit

Permalink
use comzyh/add-water
Browse files Browse the repository at this point in the history
  • Loading branch information
Kr328 committed Nov 29, 2019
1 parent 8466662 commit c11a1bb
Show file tree
Hide file tree
Showing 13 changed files with 185 additions and 234 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "core/src/main/golang/clash"]
path = core/src/main/golang/clash
url = https://github.com/Kr328/Clash
1 change: 1 addition & 0 deletions core/src/main/golang/clash
Submodule clash added at 791a7c
12 changes: 6 additions & 6 deletions core/src/main/golang/go.mod
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
module github.com/kr328/clash
module github.com/kr328/cfa

go 1.13

require (
github.com/Dreamacro/clash v0.16.1-0.20191112020912-8e10e67b8925
github.com/google/btree v1.0.0 // indirect
github.com/google/netstack v0.0.0-20191116005144-95bf25ab4723
golang.org/x/sys v0.0.0-20191118133127-cf1e2d577169
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
github.com/Dreamacro/clash v0.0.0 // local
github.com/google/netstack v0.0.0-20191031000057-4787376a6744
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe
)

replace github.com/Dreamacro/clash v0.0.0 => ./clash
13 changes: 2 additions & 11 deletions core/src/main/golang/go.sum
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
github.com/Dreamacro/clash v0.16.0 h1:ZvV9apOrDHC0s5ff4YCHTRANd/XyOuLWvpyLWOkwS6U=
github.com/Dreamacro/clash v0.16.1-0.20191112020912-8e10e67b8925 h1:MukeaV6O94OWvqzcd3C635+xQNa8spHqKEI0E+ovXnA=
github.com/Dreamacro/clash v0.16.1-0.20191112020912-8e10e67b8925/go.mod h1:4ZBtABBmIGqISniBtu9fpYORrE5mKqIP8SMCTrNNVNY=
github.com/Dreamacro/go-shadowsocks2 v0.1.5-0.20191012162057-46254afc8b68 h1:UBDLpj1IGVkUcUBuZWE6DmZApPTZcnmcV6AfyDN/yhg=
github.com/Dreamacro/go-shadowsocks2 v0.1.5-0.20191012162057-46254afc8b68/go.mod h1:Y8obOtHDOqxMGHjPglfCiXZBKExOA9VL6I6sJagOwYM=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
Expand All @@ -9,21 +6,17 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs=
github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/go-chi/cors v1.0.0 h1:e6x8k7uWbUwYs+aXDoiUzeQFT6l0cygBYyNhD7/1Tg0=
github.com/go-chi/cors v1.0.0/go.mod h1:K2Yje0VW/SJzxiyMYu6iPQYa7hMjQX2i/F491VChg1I=
github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8=
github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns=
github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/netstack v0.0.0-20191116005144-95bf25ab4723 h1:z92yYpQg57ql9n96PBLFhT+N5X44uQ2f3+CNp9Osmu8=
github.com/google/netstack v0.0.0-20191116005144-95bf25ab4723/go.mod h1:r/rILWg3r1Qy9G1IFMhsqWLq2GjwuYoTuPgG7ckMAjk=
github.com/google/netstack v0.0.0-20191031000057-4787376a6744 h1:wKeh74w+ydKcE1Eo44WDzIOcPHWmxxmtAzkAL0Mlspc=
github.com/google/netstack v0.0.0-20191031000057-4787376a6744/go.mod h1:r/rILWg3r1Qy9G1IFMhsqWLq2GjwuYoTuPgG7ckMAjk=
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/miekg/dns v1.1.22 h1:Jm64b3bO9kP43ddLjL2EY3Io6bmy1qGb9Xxz6TqS6rc=
github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
Expand Down Expand Up @@ -56,8 +49,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe h1:6fAMxZRR6sl1Uq8U61gxU+kPTs2tR8uOySCbBP7BN/M=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191118133127-cf1e2d577169 h1:LPLFLulk2vyM7yI3CwNW64O6e8AxBmr9opfv14yI7HI=
golang.org/x/sys v0.0.0-20191118133127-cf1e2d577169/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
Expand Down
4 changes: 2 additions & 2 deletions core/src/main/golang/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (

"github.com/Dreamacro/clash/constant"

"github.com/kr328/clash/profile"
"github.com/kr328/clash/server"
"github.com/kr328/cfa/profile"
"github.com/kr328/cfa/server"
)

func main() {
Expand Down
11 changes: 6 additions & 5 deletions core/src/main/golang/profile/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@ import (
adapters "github.com/Dreamacro/clash/adapters/outbound"
"github.com/Dreamacro/clash/component/auth"
trie "github.com/Dreamacro/clash/component/domain-trie"
"github.com/Dreamacro/clash/component/socks5"
"github.com/Dreamacro/clash/config"
"github.com/Dreamacro/clash/constant"
"github.com/Dreamacro/clash/dns"
"github.com/Dreamacro/clash/hub/executor"
"github.com/Dreamacro/clash/log"
"github.com/Dreamacro/clash/tunnel"

"github.com/kr328/clash/tun"
"github.com/kr328/cfa/tun"
)

// LoadDefault - load default configure
Expand Down Expand Up @@ -83,10 +82,12 @@ func LoadFromFile(path string) error {
addr = strings.ReplaceAll(addr, "0.0.0.0", "127.0.0.1")
addr = strings.ReplaceAll(addr, "::", "::1")

if err == nil {
listen := socks5.ParseAddr(addr)
tun.SetDNSRedirect(&listen)
listen, err := net.ResolveUDPAddr("udp", addr)
if err != nil {
log.Errorln("Unable to parse dns address" + err.Error())
}

tun.SetDNSRedirect(listen)
} else {
tun.SetDNSRedirect(nil)
}
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/golang/server/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"net"

"github.com/Dreamacro/clash/log"
"github.com/kr328/clash/profile"
"github.com/kr328/cfa/profile"
)

func handleProfileDefault(client *net.UnixConn) {
Expand Down
6 changes: 4 additions & 2 deletions core/src/main/golang/server/tun.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"net"

"github.com/Dreamacro/clash/log"
"github.com/kr328/clash/tun"
"github.com/kr328/cfa/tun"
"golang.org/x/sys/unix"
)

Expand Down Expand Up @@ -45,7 +45,9 @@ func handleTunStart(client *net.UnixConn) {
return
}

tun.StartTunProxy(fds[0], int(mtu))
if err := tun.StartTunProxy(fds[0], int(mtu)); err != nil {
log.Errorln("Open tun device failure" + err.Error())
}
}

func handleTunStop(client *net.UnixConn) {
Expand Down
66 changes: 0 additions & 66 deletions core/src/main/golang/tun/dev.go

This file was deleted.

115 changes: 115 additions & 0 deletions core/src/main/golang/tun/dnsredirect.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package tun

import (
"net"
"time"

"github.com/google/netstack/tcpip/adapters/gonet"
"github.com/google/netstack/tcpip/buffer"
"github.com/google/netstack/tcpip/stack"
"github.com/google/netstack/tcpip/transport/udp"
"github.com/google/netstack/waiter"
)

const defaultTimeout = 5
const defaultDNS = "8.8.8.8"

type DnsRedirectEndpoint struct {
stack *stack.Stack
udpForwarder *udp.Forwarder
targetAddr *net.UDPAddr
}

func NewDnsRedirect(s *stack.Stack) *DnsRedirectEndpoint {
result := &DnsRedirectEndpoint{
stack: s,
udpForwarder: nil,
targetAddr: &net.UDPAddr{IP: net.ParseIP("8.8.8.8"), Port: 53},
}

result.udpForwarder = udp.NewForwarder(s, func(request *udp.ForwarderRequest) {
var wq waiter.Queue
ep, err := request.CreateEndpoint(&wq)
if err != nil {
return
}

conn := gonet.NewConn(&wq, ep)

targetConn, udpErr := net.DialUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0}, result.targetAddr)
if udpErr != nil {
conn.Close()
return
}

// send
go func() {
var buffer [128]byte

defer targetConn.Close()
defer conn.Close()

for {
conn.SetDeadline(time.Now().Add(defaultTimeout * time.Second))

n, err := conn.Read(buffer[:])
if err != nil {
return
}

_, err = targetConn.Write(buffer[:n])
if err != nil {
return
}
}
}()

// recive
go func() {
var buffer [128]byte

defer targetConn.Close()
defer conn.Close()

for {
conn.SetDeadline(time.Now().Add(defaultTimeout * time.Second))

n, err := targetConn.Read(buffer[:])
if err != nil {
return
}

_, err = conn.Write(buffer[:n])
if err != nil {
return
}
}
}()
})

return result
}

func (d *DnsRedirectEndpoint) SetTargetAddress(addr *net.UDPAddr) {
d.targetAddr = addr
}

func (d *DnsRedirectEndpoint) UniqueID() uint64 {
return 999
}

func (d *DnsRedirectEndpoint) HandlePacket(r *stack.Route, id stack.TransportEndpointID, pkt buffer.VectorisedView) {
d.udpForwarder.HandlePacket(r, id, nil, pkt)
}

func (d *DnsRedirectEndpoint) HandleControlPacket(id stack.TransportEndpointID, typ stack.ControlType, extra uint32, pkt buffer.VectorisedView) {
// Unsupported
}

func (d *DnsRedirectEndpoint) Close() {
// Unsupported
}

func (d *DnsRedirectEndpoint) Wait() {
// Unsupported
}
Loading

0 comments on commit c11a1bb

Please sign in to comment.