]> 127.0.0.1 Git - part/.git/commitdiff
39
authorqydysky <qydysky@foxmail.com>
Tue, 11 Aug 2020 02:35:06 +0000 (10:35 +0800)
committerqydysky <qydysky@foxmail.com>
Tue, 11 Aug 2020 02:35:06 +0000 (10:35 +0800)
Json.go
Net.go
go.mod
go.sum

diff --git a/Json.go b/Json.go
index 32024d51a39ef476fa12f54342954c0af3bd9fec..496e7c6a8cf94328eb11f11deb26efe87a261099 100644 (file)
--- 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 7244698c9fcdf42334d3ce2625353906615a058e..f6f3aa3a0bde95e9b1a3c4da94c103a3e77358c3 100644 (file)
--- 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 726aed34a3e93a8e920c089f81b6e4fcbfef199c..c26f1b97a7346fd1a4f7301a1a5050576d4242d7 100644 (file)
--- 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 989fafad8773e6023177039d7e3ad481f8aff560..a3b7dca45cf7bfcde4dc9e950cef32358aa4130b 100644 (file)
--- 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=