mirror of
https://github.com/qdm12/ddns-updater.git
synced 2026-04-05 08:54:09 -04:00
feat(publicip): add changeip ipv4v6 echo service
This commit is contained in:
@@ -290,6 +290,7 @@ You can otherwise customize it with the following:
|
|||||||
- `nnev` using [https://ip.nnev.de](https://ip.nnev.de)
|
- `nnev` using [https://ip.nnev.de](https://ip.nnev.de)
|
||||||
- `wtfismyip` using [https://wtfismyip.com/text](https://wtfismyip.com/text)
|
- `wtfismyip` using [https://wtfismyip.com/text](https://wtfismyip.com/text)
|
||||||
- `seeip` using [https://api.seeip.org](https://api.seeip.org)
|
- `seeip` using [https://api.seeip.org](https://api.seeip.org)
|
||||||
|
- `changeip` using [https://ip.changeip.com](https://ip.changeip.com)
|
||||||
- You can also specify an HTTPS URL with prefix `url:` for example `url:https://ipinfo.io/ip`
|
- You can also specify an HTTPS URL with prefix `url:` for example `url:https://ipinfo.io/ip`
|
||||||
- `PUBLICIPV4_HTTP_PROVIDERS` gets your public IPv4 address only. It can be one or more of the following:
|
- `PUBLICIPV4_HTTP_PROVIDERS` gets your public IPv4 address only. It can be one or more of the following:
|
||||||
- `ipleak` using [https://ipv4.ipleak.net/json](https://ipv4.ipleak.net/json)
|
- `ipleak` using [https://ipv4.ipleak.net/json](https://ipv4.ipleak.net/json)
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ func IPv6(text string) (addresses []netip.Addr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func extract(text string, alphabet string) (addresses []netip.Addr) {
|
func extract(text string, alphabet string) (addresses []netip.Addr) {
|
||||||
|
addressesSeen := make(map[netip.Addr]struct{})
|
||||||
var start, end int
|
var start, end int
|
||||||
for {
|
for {
|
||||||
for i := start; i < len(text); i++ {
|
for i := start; i < len(text); i++ {
|
||||||
@@ -39,7 +40,11 @@ func extract(text string, alphabet string) (addresses []netip.Addr) {
|
|||||||
possibleIPString := text[start:end]
|
possibleIPString := text[start:end]
|
||||||
ipAddress, err := netip.ParseAddr(possibleIPString)
|
ipAddress, err := netip.ParseAddr(possibleIPString)
|
||||||
if err == nil { // Valid IP address found
|
if err == nil { // Valid IP address found
|
||||||
addresses = append(addresses, ipAddress)
|
_, seen := addressesSeen[ipAddress]
|
||||||
|
if !seen {
|
||||||
|
addressesSeen[ipAddress] = struct{}{}
|
||||||
|
addresses = append(addresses, ipAddress)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if end == len(text) {
|
if end == len(text) {
|
||||||
|
|||||||
@@ -85,14 +85,14 @@ func Test_fetch(t *testing.T) {
|
|||||||
ctx: context.Background(),
|
ctx: context.Background(),
|
||||||
url: "https://opendns.com/ip",
|
url: "https://opendns.com/ip",
|
||||||
version: ipversion.IP4or6,
|
version: ipversion.IP4or6,
|
||||||
httpContent: []byte(`1.67.201.251 1.67.201.251`),
|
httpContent: []byte(`1.67.201.251 1.67.201.252`),
|
||||||
err: errors.New("too many IP addresses: found 2 IPv4 addresses instead of 1"),
|
err: errors.New("too many IP addresses: found 2 IPv4 addresses instead of 1"),
|
||||||
},
|
},
|
||||||
"too many IPv6s for IP4or6": {
|
"too many IPv6s for IP4or6": {
|
||||||
ctx: context.Background(),
|
ctx: context.Background(),
|
||||||
url: "https://opendns.com/ip",
|
url: "https://opendns.com/ip",
|
||||||
version: ipversion.IP4or6,
|
version: ipversion.IP4or6,
|
||||||
httpContent: []byte(`::1 ::1`),
|
httpContent: []byte(`::1 ::2`),
|
||||||
err: errors.New("too many IP addresses: found 2 IPv6 addresses instead of 1"),
|
err: errors.New("too many IP addresses: found 2 IPv6 addresses instead of 1"),
|
||||||
},
|
},
|
||||||
"no IP for IP4": {
|
"no IP for IP4": {
|
||||||
@@ -113,7 +113,7 @@ func Test_fetch(t *testing.T) {
|
|||||||
ctx: context.Background(),
|
ctx: context.Background(),
|
||||||
url: "https://opendns.com/ip",
|
url: "https://opendns.com/ip",
|
||||||
version: ipversion.IP4,
|
version: ipversion.IP4,
|
||||||
httpContent: []byte(`1.67.201.251 1.67.201.251`),
|
httpContent: []byte(`1.67.201.251 1.67.201.252`),
|
||||||
err: errors.New("too many IP addresses: found 2 IPv4 addresses instead of 1"),
|
err: errors.New("too many IP addresses: found 2 IPv4 addresses instead of 1"),
|
||||||
},
|
},
|
||||||
"no IP for IP6": {
|
"no IP for IP6": {
|
||||||
@@ -137,7 +137,7 @@ func Test_fetch(t *testing.T) {
|
|||||||
ctx: context.Background(),
|
ctx: context.Background(),
|
||||||
url: "https://opendns.com/ip",
|
url: "https://opendns.com/ip",
|
||||||
version: ipversion.IP6,
|
version: ipversion.IP6,
|
||||||
httpContent: []byte(`::1 ::1`),
|
httpContent: []byte(`::1 ::2`),
|
||||||
err: errors.New("too many IP addresses: found 2 IPv6 addresses instead of 1"),
|
err: errors.New("too many IP addresses: found 2 IPv6 addresses instead of 1"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ const (
|
|||||||
Nnev Provider = "nnev"
|
Nnev Provider = "nnev"
|
||||||
Wtfismyip Provider = "wtfismyip"
|
Wtfismyip Provider = "wtfismyip"
|
||||||
Seeip Provider = "seeip"
|
Seeip Provider = "seeip"
|
||||||
|
Changeip Provider = "changeip"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ListProviders() []Provider {
|
func ListProviders() []Provider {
|
||||||
@@ -38,6 +39,7 @@ func ListProviders() []Provider {
|
|||||||
Nnev,
|
Nnev,
|
||||||
Wtfismyip,
|
Wtfismyip,
|
||||||
Seeip,
|
Seeip,
|
||||||
|
Changeip,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,6 +138,8 @@ func (provider Provider) url(version ipversion.IPVersion) (url string, ok bool)
|
|||||||
url = "https://wtfismyip.com/text"
|
url = "https://wtfismyip.com/text"
|
||||||
case Seeip:
|
case Seeip:
|
||||||
url = "https://api.seeip.org"
|
url = "https://api.seeip.org"
|
||||||
|
case Changeip:
|
||||||
|
url = "https://ip.changeip.com"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func Test_ListProvidersForVersion(t *testing.T) {
|
|||||||
"ip4or6": {
|
"ip4or6": {
|
||||||
version: ipversion.IP4or6,
|
version: ipversion.IP4or6,
|
||||||
providers: []Provider{Google, Ifconfig, Ipify, Ipinfo, Spdyn, Ipleak,
|
providers: []Provider{Google, Ifconfig, Ipify, Ipinfo, Spdyn, Ipleak,
|
||||||
Icanhazip, Ident, Nnev, Wtfismyip, Seeip},
|
Icanhazip, Ident, Nnev, Wtfismyip, Seeip, Changeip},
|
||||||
},
|
},
|
||||||
"ip4": {
|
"ip4": {
|
||||||
version: ipversion.IP4,
|
version: ipversion.IP4,
|
||||||
|
|||||||
Reference in New Issue
Block a user