timmy revidoval tento gist 10 months ago. Přejít na revizi
Žádné změny
timmy revidoval tento gist 11 months ago. Přejít na revizi
Žádné změny
timmy revidoval tento gist 1 year ago. Přejít na revizi
1 file changed, 85 insertions
dnsbl_checker.py(vytvořil soubor)
| @@ -0,0 +1,85 @@ | |||
| 1 | + | import dns.resolver | |
| 2 | + | ||
| 3 | + | class 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 | + | ||
| 74 | + | if __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 | + | ||
Novější
Starší