mirror of https://github.com/dnomd343/ProxyC
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.
36 lines
923 B
36 lines
923 B
2 years ago
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
2 years ago
|
import re
|
||
2 years ago
|
from IPy import IP
|
||
2 years ago
|
|
||
2 years ago
|
|
||
|
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
|
||
2 years ago
|
|
||
|
|
||
2 years ago
|
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
|