From e266cc2bc68fe9ba1ec9823bde82026a0e26f2b4 Mon Sep 17 00:00:00 2001 From: qydysky Date: Tue, 11 Aug 2020 10:35:06 +0800 Subject: [PATCH] 39 --- Json.go | 34 ++++++++++++++++--------- Net.go | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- go.mod | 10 ++++++-- go.sum | 29 +++++++++++++++++++++ 4 files changed, 136 insertions(+), 16 deletions(-) diff --git a/Json.go b/Json.go index 32024d5..496e7c6 100644 --- a/Json.go +++ b/Json.go @@ -8,23 +8,33 @@ type json struct {} func Json() (*json) {return &json{}} -func (*json) GetValFrom(file,key string)interface {}{ +func (*json) GetValFrom(Source interface{},key string)interface {}{ var jq *gojsonq.JSONQ - if Checkfile().IsExist(file) { - jq = gojsonq.New().File(file) - }else{ - jq = gojsonq.New().FromString(file) - } + switch Source.(type) { + case string: + if Checkfile().IsExist(Source.(string)) { + jq = gojsonq.New().File(Source.(string)) + }else{ + jq = gojsonq.New().FromString(Source.(string)) + } + default: + jq = gojsonq.New().FromInterface(Source) + } return jq.Find(key) } -func (this *json) GetMultiValFrom(file string,key []string) []interface{}{ +func (this *json) GetMultiValFrom(Source interface{},key []string) []interface{}{ var jq *gojsonq.JSONQ - if Checkfile().IsExist(file) { - jq = gojsonq.New().File(file) - }else{ - jq = gojsonq.New().FromString(file) - } + switch Source.(type) { + case string: + if Checkfile().IsExist(Source.(string)) { + jq = gojsonq.New().File(Source.(string)) + }else{ + jq = gojsonq.New().FromString(Source.(string)) + } + default: + jq = gojsonq.New().FromInterface(Source) + } var returnVal []interface{} for _,i := range key { diff --git a/Net.go b/Net.go index 7244698..f6f3aa3 100644 --- a/Net.go +++ b/Net.go @@ -3,17 +3,48 @@ package part import ( "net" "sync" - // "errors" + "errors" + "bytes" + "os/exec" + "runtime" + "github.com/miekg/dns" ) type netl struct{ RV []interface{} + Dns dnsl } func Net() *netl{ return &netl{} } +type dnsl struct{ + Server string +} + +func (this *netl) Nslookup(target string) error { + c := dns.Client{} + m := dns.Msg{} + + m.SetQuestion(target+".", dns.TypeA) + + if this.Dns.Server == "" { + if e := this.GetLocalDns(); e != nil {return e} + } + + r, _, err := c.Exchange(&m, this.Dns.Server+":53") + if err != nil { + return err + } + if len(r.Answer) == 0 { + return errors.New("no answer") + } + + this.RV = append(this.RV, dns.Field(r.Answer[0],1)) + return nil +} + func (*netl) TestDial(network,address string) bool { conn, err := net.Dial(network,address) if err != nil { @@ -121,4 +152,48 @@ func (t *netl) Forward(targetaddr,targetnetwork *string, Need_Accept bool) { go tcpBridge2(proxyconn,targetconn) } -} \ No newline at end of file +} + +func (this *netl) GetLocalDns() error { + if runtime.GOOS == "windows" { + cmd := exec.Command("nslookup","127.0.0.1") + output, _ := cmd.CombinedOutput() + var ip []byte + loc_ip := bytes.Index(output,[]byte("Address:"))+8 + + for brk:=1;brk>=0; { + tmp := bytes.IndexAny(output[loc_ip:],"1234567890.") + if tmp == 0 { + ip=append(ip,output[loc_ip]) + loc_ip=loc_ip+1 + }else{ + brk=brk-1 + loc_ip=loc_ip+tmp + } + } + + this.Dns.Server = string(ip) + return nil + }else if Checkfile().IsExist("/etc/resolv.conf") { + cmd := exec.Command("cat","/etc/resolv.conf") + output, _ := cmd.CombinedOutput() + var ip []byte + loc_ip := bytes.Index(output,[]byte("nameserver"))+10 + for brk:=1;brk>=0; { + tmp := bytes.IndexAny(output[loc_ip:],"1234567890.") + if tmp == 0 { + ip=append(ip,output[loc_ip]) + loc_ip=loc_ip+1 + }else{ + brk=brk-1 + loc_ip=loc_ip+tmp + } + } + this.Dns.Server = string(ip) + return nil + } + Logf().E("[err]Dns: system: ",runtime.GOOS) + Logf().E("[err]Dns: none") + + return errors.New("1") +} diff --git a/go.mod b/go.mod index 726aed3..c26f1b9 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,13 @@ require ( github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect github.com/go-ole/go-ole v1.2.4 // indirect github.com/klauspost/compress v1.10.10 - github.com/shirou/gopsutil v2.20.6+incompatible + github.com/miekg/dns v1.1.31 + github.com/shirou/gopsutil v2.20.7+incompatible github.com/thedevsaddam/gojsonq v2.3.0+incompatible - golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1 // indirect + //github.com/thedevsaddam/gojsonq/v2 v2.5.2 + golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de // indirect + golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect + golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 // indirect ) + +replace github.com/thedevsaddam/gojsonq v2.3.0+incompatible => github.com/thedevsaddam/gojsonq/v2 v2.5.2 diff --git a/go.sum b/go.sum index 989fafa..a3b7dca 100644 --- a/go.sum +++ b/go.sum @@ -4,10 +4,39 @@ github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I= github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo= +github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/shirou/gopsutil v2.20.6+incompatible h1:P37G9YH8M4vqkKcwBosp+URN5O8Tay67D2MbR361ioY= github.com/shirou/gopsutil v2.20.6+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v2.20.7+incompatible h1:Ymv4OD12d6zm+2yONe39VSmp2XooJe8za7ngOLW/o/w= +github.com/shirou/gopsutil v2.20.7+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/thedevsaddam/gojsonq v1.9.1 h1:zQulEP43nwmq5EKrNWyIgJVbqDeMdC1qzXM/f5O15a0= github.com/thedevsaddam/gojsonq v2.3.0+incompatible h1:i2lFTvGY4LvoZ2VUzedsFlRiyaWcJm3Uh6cQ9+HyQA8= github.com/thedevsaddam/gojsonq v2.3.0+incompatible/go.mod h1:RBcQaITThgJAAYKH7FNp2onYodRz8URfsuEGpAch0NA= +github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0= +github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1 h1:sIky/MyNRSHTrdxfsiUSS4WIAMvInbeXljJz+jDjeYE= golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 h1:yi1hN8dcqI9l8klZfy4B8mJvFmmAxJEePIQQFNSd7Cs= +golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -- 2.39.2