检测不同类型网络错误的便携式方法

我想确定网络级别发生了什么样的错误。我发现的唯一方法是使用正则表达式检查错误消息,但现在我发现这些消息可以使用不同的语言(取决于操作系统配置),这使得正则表达式很难检测到。有没有更好的方法来做到这一点?


package main


import (

  "github.com/miekg/dns"

  "net"

  "regexp"

)


func main() {

  var c dns.Client

  m := new(dns.Msg)


  m.SetQuestion("3com.br.", dns.TypeSOA)

  _, _, err := c.Exchange(m, "ns1.3com.com.:53")

  checkErr(err)


  m.SetQuestion("example.com.", dns.TypeSOA)

  _, _, err = c.Exchange(m, "idontexist.br.:53")

  checkErr(err)


  m.SetQuestion("acasadocartaocuritiba.blog.br.", dns.TypeSOA)

  _, _, err = c.Exchange(m, "ns7.storedns22.in.:53")

  checkErr(err)

}


func checkErr(err error) {

  if err == nil {

    println("Ok")

  } else if netErr, ok := err.(net.Error); ok && netErr.Timeout() {

    println("Timeout")

  } else if match, _ := regexp.MatchString(".*lookup.*", err.Error()); match {

    println("Unknown host")

  } else if match, _ := regexp.MatchString(".*connection refused.*", err.Error()); match {

    println("Connection refused")

  } else {

    println("Other error")

  }

}

结果:


$ go run neterrors.go

Timeout

Unknown host

Connection refused

我在使用葡萄牙语作为默认语言的 Windows 操作系统中测试系统时发现了这个问题。


慕标琳琳
浏览 155回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go