-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
78 lines (64 loc) · 2.7 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import re
import os
import subprocess
import platform
def path(filename):
application_path = os.path.dirname(os.path.realpath(__file__))
return os.path.join(application_path, filename)
def is_valid_ip(ip):
# 使用正则表达式匹配 IPv4 地址
pattern = r"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
return bool(re.match(pattern, ip))
def is_valid_domain(domain):
# 使用正则表达式匹配域名格式
pattern = r"^([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]\.)+[a-zA-Z]{2,}$"
return bool(re.match(pattern, domain))
def is_valid_ip_domain(ip_domain):
# 使用正则表达式匹配合法的IP地址-域名
ipdomain = ip_domain.split()
return len(ipdomain) == 2 and is_valid_ip(ipdomain[0]) and is_valid_domain(ipdomain[1])
def get_hosts_file_path():
system = platform.system()
if system == "Windows":
# Windows系统下的hosts文件路径
return os.path.join(os.path.expandvars("%SystemRoot%"), 'system32', 'drivers', 'etc', 'hosts')
elif system == "Darwin" or system == "Linux":
# macOS和Linux系统下的hosts文件路径
return '/etc/hosts'
else:
# 不支持的操作系统
return None
def update_hosts_file(host_context):
hosts_path = get_hosts_file_path()
if not hosts_path:
return
with open(hosts_path, 'r') as f:
old_content = f.read()
pattern = r'# Hostip Host Start([\s\S]*?)# Hostip Host End'
new_content = re.sub(pattern, host_context, old_content, flags=re.DOTALL)
if new_content == old_content:
new_content = old_content + '\r\n\r\n' + host_context
with open(hosts_path, 'w') as f:
f.write(new_content)
# 刷新 DNS 缓存
refresh_dns_cache()
def open_hosts_file():
hosts_path = get_hosts_file_path()
if not hosts_path:
return
subprocess.Popen(['notepad', hosts_path], shell=True)
def refresh_dns_cache():
# 刷新 DNS 缓存
system = platform.system()
if system == "Windows":
# 刷新DNS缓存命令(Windows)
subprocess.run(["ipconfig", "/flushdns"], text=True, check=True)
elif system == "Darwin" or system == "Linux":
# 刷新DNS缓存命令(macOS和Linux)
subprocess.run(["sudo", "systemd-resolve", "--flush-caches"], text=True, check=True)
# 如果你的系统不使用systemd-resolve,则可以使用以下命令(具体命令可能因Linux发行版而异):
# subprocess.run(["sudo", "/etc/init.d/nscd", "restart"], text=True, check=True)
# 或
# subprocess.run(["sudo", "service", "dnsmasq", "restart"], text=True, check=True)
else:
print("Unsupported operating system")