timmy ha revisionato questo gist 10 months ago. Vai alla revisione
Nessuna modifica
timmy ha revisionato questo gist 11 months ago. Vai alla revisione
Nessuna modifica
timmy ha revisionato questo gist 1 year ago. Vai alla revisione
1 file changed, 85 insertions
dnsbl_checker.py(file creato)
| @@ -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 | + | ||
Più nuovi
Più vecchi