mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-26 18:18:25 +00:00
Merge pull request #2048 from ujjwal96/ipv6-addresses
Absolute IPv6 addresses supported
This commit is contained in:
commit
ba76dbc672
@ -1,3 +1,4 @@
|
||||
import ipaddress
|
||||
import re
|
||||
|
||||
# Allow underscore in host name
|
||||
@ -6,17 +7,26 @@ _label_valid = re.compile(b"(?!-)[A-Z\d\-_]{1,63}(?<!-)$", re.IGNORECASE)
|
||||
|
||||
def is_valid_host(host: bytes) -> bool:
|
||||
"""
|
||||
Checks if a hostname is valid.
|
||||
Checks if the passed bytes are a valid DNS hostname or an IPv4/IPv6 address.
|
||||
"""
|
||||
try:
|
||||
host.decode("idna")
|
||||
except ValueError:
|
||||
return False
|
||||
# RFC1035: 255 bytes or less.
|
||||
if len(host) > 255:
|
||||
return False
|
||||
if host and host[-1:] == b".":
|
||||
host = host[:-1]
|
||||
return all(_label_valid.match(x) for x in host.split(b"."))
|
||||
# DNS hostname
|
||||
if all(_label_valid.match(x) for x in host.split(b".")):
|
||||
return True
|
||||
# IPv4/IPv6 address
|
||||
try:
|
||||
ipaddress.ip_address(host.decode('idna'))
|
||||
return True
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
|
||||
def is_valid_port(port):
|
||||
|
@ -11,3 +11,4 @@ def test_is_valid_host():
|
||||
assert check.is_valid_host(b"one.two.")
|
||||
# Allow underscore
|
||||
assert check.is_valid_host(b"one_two")
|
||||
assert check.is_valid_host(b"::1")
|
||||
|
Loading…
Reference in New Issue
Block a user