diff --git a/module/traceroute/traceroute.go b/module/traceroute/traceroute.go index 25f04de..1cd8320 100644 --- a/module/traceroute/traceroute.go +++ b/module/traceroute/traceroute.go @@ -4,8 +4,10 @@ import ( "context" "encoding/json" "fmt" + "net" "os" "os/exec" + "regexp" "strings" "validation-bot/task" @@ -105,6 +107,14 @@ func (q Auditor) ValidateProvider(ctx context.Context, provider string) (*Result hops, err := q.Traceroute(ctx, host, port, q.useSudo) if err != nil { + re := regexp.MustCompile("network is unreachable") + var netErr net.OpError + if ok := errors.As(err, &netErr); ok && re.MatchString(err.Error()) { + return &ResultContent{ + Status: ConnectError, + ErrorMessage: "network is unreachable", + }, nil + } return nil, errors.Wrap(err, "failed to traceroute") } diff --git a/module/traceroute/types.go b/module/traceroute/types.go index 8428930..6269af8 100644 --- a/module/traceroute/types.go +++ b/module/traceroute/types.go @@ -24,6 +24,7 @@ const ( Success Status = "success" InvalidMultiAddress Status = "invalid_multi_address" NoMultiAddress Status = "no_multi_address" + ConnectError Status = "connect_error" ) type HopResult struct {