diff --git a/main.go b/main.go index 7a46c6f..6a079dd 100644 --- a/main.go +++ b/main.go @@ -25,6 +25,8 @@ func getResolver(resolverName string) (PublicIpResolver, string) { return public_resolvers.NewDefaultCloudflareTrace(), public_resolvers.CloudflareTraceTag case public_resolvers.V4IdentMeTag: return public_resolvers.NewV4IdentMeDefault(), public_resolvers.V4IdentMeTag + case public_resolvers.IcanhazipTag: + return public_resolvers.NewIcanhazipDefault(), public_resolvers.IcanhazipTag case public_resolvers.IfConfigMeTag: fallthrough default: diff --git a/public_resolvers/icanhazip.go b/public_resolvers/icanhazip.go new file mode 100644 index 0000000..47e9fec --- /dev/null +++ b/public_resolvers/icanhazip.go @@ -0,0 +1,31 @@ +package public_resolvers + +import ( + "net/http" + "time" +) + +const ( + IcanhazipTag = "icanhazip" + IcanhazipUrl = "https://v4.icanhazip.com/" +) + +type Icanhazip struct { + baseResolver +} + +func NewIcanhazipDefault() *Icanhazip { + return NewIcanhazip(&http.Client{ + Timeout: 10 * time.Second, + }) +} + +func NewIcanhazip(client Doer) *Icanhazip { + return &Icanhazip{ + baseResolver: baseResolver{ + client: client, + url: v4IdentMeUrl, + ipParser: defaultIpParser, + }, + } +}