add GenericHttpRegexSource provider
This commit is contained in:
parent
3131f2d0a0
commit
3e248b0adf
33
pddnsc/sources/httpregex.py
Normal file
33
pddnsc/sources/httpregex.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import re
|
||||||
|
|
||||||
|
from pddnsc.sources.http import GenericHttpSource
|
||||||
|
|
||||||
|
|
||||||
|
class GenericHttpRegexSource(GenericHttpSource):
|
||||||
|
"""Базовый провайдер получения IP адресов по http/https ссылкам в виде текста c помощью регулярных выражений
|
||||||
|
|
||||||
|
Конфигурация:
|
||||||
|
|
||||||
|
- url_v4: *URL* для получения адреса *IPv4*
|
||||||
|
- url_v6: *URL* для получения адреса *IPv6*
|
||||||
|
- regex_v4: регулярное выражение для *IPv4*, значение по умолчанию см. в коде
|
||||||
|
- regex_v6: регулярное выражение для *IPv6*, значение по умолчанию см. в коде
|
||||||
|
- headers (`dict`): словарь дополнительных заголовков (*необязательно*)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def post_init(self):
|
||||||
|
super().post_init()
|
||||||
|
rx_v4 = r"\b(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
|
||||||
|
rx_v6 = r"\b(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\b"
|
||||||
|
self.regex_v4 = re.compile(self.config.get("regex_v4", rx_v4))
|
||||||
|
self.regex_v6 = re.compile(self.config.get("regex_v6", rx_v6))
|
||||||
|
|
||||||
|
def filter_ipv4(self, ipv4):
|
||||||
|
match = self.regex_v4.search(ipv4 or "")
|
||||||
|
ipv4 = match and match[0]
|
||||||
|
return super().filter_ipv4(ipv4)
|
||||||
|
|
||||||
|
def filter_ipv6(self, ipv6):
|
||||||
|
match = self.regex_v6.search(ipv6 or "")
|
||||||
|
ipv6 = match and match[0]
|
||||||
|
return super().filter_ipv6(ipv6)
|
@ -1,4 +1,4 @@
|
|||||||
debug = true
|
debug = false
|
||||||
require_ipv4 = true
|
require_ipv4 = true
|
||||||
|
|
||||||
[sources]
|
[sources]
|
||||||
@ -8,6 +8,10 @@ require_ipv4 = true
|
|||||||
provider = "WTFIsMyIP"
|
provider = "WTFIsMyIP"
|
||||||
[sources.ipsb]
|
[sources.ipsb]
|
||||||
provider = "IPSB"
|
provider = "IPSB"
|
||||||
|
[sources.checkip_dyndns]
|
||||||
|
provider = "GenericHttpRegexSource"
|
||||||
|
url_v4 = "http://checkip.dyndns.org/"
|
||||||
|
#regex_v4 = "\\b\\d{1,3}(\\.\\d{1,3}){3}\\b"
|
||||||
[sources.ifconfig]
|
[sources.ifconfig]
|
||||||
provider = "GenericHttpSource"
|
provider = "GenericHttpSource"
|
||||||
url_v4 = "https://ifconfig.me/ip"
|
url_v4 = "https://ifconfig.me/ip"
|
||||||
|
Loading…
Reference in New Issue
Block a user