You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

35 lines
923 B

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
from IPy import IP
def isHost(host: str) -> bool:
return isIpAddr(host) or isDomain(host) # IPv4 / IPv6 / Domain
def isPort(port: int) -> bool:
if type(port) != int:
return False
return port in range(1, 65536) # 1 ~ 65535
def isIpAddr(ipAddr: str) -> bool:
try:
if '/' in ipAddr: # filter CIDR
return False
if '.' not in ipAddr and ':' not in ipAddr: # not IPv4 or IPv6
return False
IP(ipAddr) # try to convert to IP address
return True # valid IP address
except:
return False
def isDomain(domain: str) -> bool:
try:
domainRegex = r'^(?=^.{3,255}$)[a-zA-Z0-9_][a-zA-Z0-9_-]{0,62}(\.[a-zA-Z0-9_][a-zA-Z0-9_-]{0,62})+$'
return re.search(domainRegex, domain) is not None # regex matching
except: # unexpected error
return False