dnsbl_checker.py
· 2.8 KiB · Python
Sin formato
import dns.resolver
class DNSBLChecker:
def __init__(self, providers=None):
"""
初始化 DNSBLChecker,允許自定義 DNSBL 提供者列表。
:param providers: DNSBL 提供者列表 (可選,默認為常用黑名單提供者)
"""
self.providers = providers or [
"zen.spamhaus.org",
"bl.spamcop.net",
"dnsbl.sorbs.net",
"b.barracudacentral.org"
]
def add_provider(self, provider):
"""
新增一個 DNSBL 提供者。
:param provider: 提供者的域名,例如 "new.blacklist.com"
"""
if provider not in self.providers:
self.providers.append(provider)
print(f"已新增提供者:{provider}")
else:
print(f"提供者 {provider} 已存在。")
def remove_provider(self, provider):
"""
移除一個 DNSBL 提供者。
:param provider: 提供者的域名
"""
if provider in self.providers:
self.providers.remove(provider)
print(f"已移除提供者:{provider}")
else:
print(f"提供者 {provider} 不在列表中。")
def check_ip(self, ip_address):
"""
檢查 IP 是否被列入任何 DNSBL 提供者的黑名單中。
:param ip_address: 要檢查的 IP 地址
"""
reversed_ip = ".".join(reversed(ip_address.split(".")))
blacklisted_by = []
for provider in self.providers:
query = f"{reversed_ip}.{provider}"
try:
# 嘗試解析 DNS 查詢
dns.resolver.resolve(query, "A")
blacklisted_by.append(provider)
except dns.resolver.NXDOMAIN:
# 未列入該提供者黑名單
continue
except Exception as e:
print(f"檢查 {provider} 時發生錯誤:{e}")
return blacklisted_by
def display_result(self, ip_address):
"""
顯示檢查結果。
:param ip_address: 要檢查的 IP 地址
"""
blacklisted_by = self.check_ip(ip_address)
if blacklisted_by:
print(f"IP 地址 {ip_address} 被列入以下黑名單:")
for provider in blacklisted_by:
print(f"- {provider}")
else:
print(f"IP 地址 {ip_address} 未被列入任何黑名單。")
if __name__ == "__main__":
# 初始化 DNSBL 檢查器
dnsbl_checker = DNSBLChecker()
# 檢查 IP
ip_to_check = "210.242.157.193" # 替換成你的郵件伺服器 IP 地址
dnsbl_checker.display_result(ip_to_check)
# 動態操作提供者列表
dnsbl_checker.add_provider("new.blacklist.com")
dnsbl_checker.remove_provider("bl.spamcop.net")
| 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 | |
| 86 |