2017-04-12 1 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의 값에 "내부"값이 있으면 선택된 파일이 열리고 포트를 반복합니다. LookupAddr에서 반환 된 주소는 항상 box.internal.blah.blah.com에 있으므로이 주소의 두 번째 필드 (이 경우 내부)를 찾고 정규식과 비교하고 "내부"를 찾으면 루프를 통해 순환 할 주소문자열에 대한 정규식 값

내 정규 표현식이 가장 잘못된 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

관련 문제