Utoljára aktív 10 months ago

這段程式碼是一個 DNSBLChecker 工具,用於檢查指定的 IP 是否被列入常見的 DNS 黑名單(DNSBL)。支持動態添加或移除 DNSBL 提供者,並顯示檢查結果,包括列入的黑名單列表。

Revízió fdd2a4f8d494d4a46a9eff42632fe14289863fa4

dnsbl_checker.py Eredeti
1import dns.resolver
2
3class DNSBLChecker:
4 def __init__(self, providers=None):
5 """
6 初始化 DNSBLChecker,允許自定義 DNSBL 提供者列表。
7 :param providers: DNSBL 提供者列表 (可選,默認為常用黑名單提供者)
8 """
9 self.providers = providers or [
10 "zen.spamhaus.org",
11 "bl.spamcop.net",
12 "dnsbl.sorbs.net",
13 "b.barracudacentral.org"
14 ]
15
16 def add_provider(self, provider):
17 """
18 新增一個 DNSBL 提供者。
19 :param provider: 提供者的域名,例如 "new.blacklist.com"
20 """
21 if provider not in self.providers:
22 self.providers.append(provider)
23 print(f"已新增提供者:{provider}")
24 else:
25 print(f"提供者 {provider} 已存在。")
26
27 def remove_provider(self, provider):
28 """
29 移除一個 DNSBL 提供者。
30 :param provider: 提供者的域名
31 """
32 if provider in self.providers:
33 self.providers.remove(provider)
34 print(f"已移除提供者:{provider}")
35 else:
36 print(f"提供者 {provider} 不在列表中。")
37
38 def check_ip(self, ip_address):
39 """
40 檢查 IP 是否被列入任何 DNSBL 提供者的黑名單中。
41 :param ip_address: 要檢查的 IP 地址
42 """
43 reversed_ip = ".".join(reversed(ip_address.split(".")))
44 blacklisted_by = []
45
46 for provider in self.providers:
47 query = f"{reversed_ip}.{provider}"
48 try:
49 # 嘗試解析 DNS 查詢
50 dns.resolver.resolve(query, "A")
51 blacklisted_by.append(provider)
52 except dns.resolver.NXDOMAIN:
53 # 未列入該提供者黑名單
54 continue
55 except Exception as e:
56 print(f"檢查 {provider} 時發生錯誤:{e}")
57
58 return blacklisted_by
59
60 def display_result(self, ip_address):
61 """
62 顯示檢查結果。
63 :param ip_address: 要檢查的 IP 地址
64 """
65 blacklisted_by = self.check_ip(ip_address)
66 if blacklisted_by:
67 print(f"IP 地址 {ip_address} 被列入以下黑名單:")
68 for provider in blacklisted_by:
69 print(f"- {provider}")
70 else:
71 print(f"IP 地址 {ip_address} 未被列入任何黑名單。")
72
73
74if __name__ == "__main__":
75 # 初始化 DNSBL 檢查器
76 dnsbl_checker = DNSBLChecker()
77
78 # 檢查 IP
79 ip_to_check = "210.242.157.193" # 替換成你的郵件伺服器 IP 地址
80 dnsbl_checker.display_result(ip_to_check)
81
82 # 動態操作提供者列表
83 dnsbl_checker.add_provider("new.blacklist.com")
84 dnsbl_checker.remove_provider("bl.spamcop.net")
85
86