为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕标琳琳 2021-07-29 17:06:18
我想确定网络级别发生了什么样的错误。我发现的唯一方法是使用正则表达式检查错误消息,但现在我发现这些消息可以使用不同的语言(取决于操作系统配置),这使得正则表达式很难检测到。有没有更好的方法来做到这一点?package mainimport (  "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.goTimeoutUnknown hostConnection refused我在使用葡萄牙语作为默认语言的 Windows 操作系统中测试系统时发现了这个问题。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信