2017-04-12 13 views
0
func main() { 

    var ip string 
    fmt.Print("Host: ") 
    fmt.Scanln(&ip) 

    addr, _ := net.LookupAddr(ip) 

    app := "grep" 
    arg0 := "inst" 
    arg1 := "acl.yaml" 

    cmd := exec.Command(app, arg0, arg1) 
    stdout, err := cmd.Output() 
    x := string(stdout) 

    reg, _ := regexp.Compile(`(internal)`) 
    if err != nil { 
     println(err.Error()) 
     return 
    } 
    if ip != "" { 
     validateIP(ip) 
    } 
    fmt.Println(x) 
    fmt.Println(addr[0]) 
    //fmt.Println(stdout) 
    if addr[0] == reg.FindString(`(internal)`){ 
     file, err := os.Open("ports.json") 
     if err != nil { 
      panic(err) 
     } 
     defer file.Close() 
     ports := []portDef{} 
     err = json.NewDecoder(file).Decode(&ports) 
     if err != nil { 
      panic(err) 
     } 

     for _, p := range ports { 
      conn, err := net.Dial(p.Protocol, ip + ":" + p.Port) 
      if conn != nil { 
       fmt.Println("") 
       fmt.Printf("Connection established between %s and Localhost.\n", addr) 
       fmt.Printf("Remote Address : %s \n", conn.RemoteAddr().String()) 
       fmt.Printf("Local Address : %s \n", conn.LocalAddr().String()) 
      } 
      fmt.Println("") 
      if err != nil { 
       fmt.Println(err) 
      } 
     } 
    } 
} 

正規表現の値を文字列と比較しようとしています。この場合、私は"addr"の値を正規表現と比較し、addrの値に "internal"が含まれていて、選択されたファイルを開き、ポートを反復することを望みます。 LookupAddrから返されたアドレスは常にbox.internal.blah.blah.comにあるので、私は正規表現と比較されるアドレス(この場合は内部)の2番目のフィールドを探しています。そのアドレスはループを循環します。正規表現の値と文字列の比較

私の正規表現は、おそらくここで何が間違っているのでしょうか。どんな助けでも大歓迎です。

答えて