没有产品在购物车中。
DNS 安全工具:使用 Python 监控和检测DDoS攻击
在当今的网络世界中,保护 DNS 流量至关重要。DNS 是互联网的核心协议之一,经常成为攻击者发动 DDoS 和 DoS 攻击的目标。
监控 DNS 流量中是否存在异常大的数据包有助于及早发现这些攻击。
本文创建一个基于 Python 的工具,使用pyshark和colorama来监控 DNS 流量。
Windows:
Add Python to PATH
→ 安装python --version
显示版本号 macOS/Linux:
bash
# 系统通常预装Python3,直接验证python3 --version
打开终端(Windows用CMD/PowerShell)执行:
bash
pip install pyshark colorama
Windows:
Install TShark
(重要!) macOS:
bash
brew install wireshark
Linux (Ubuntu/Debian):
bash
sudo apt-get install tshark
01
模块概述与代码实现
该工具将在检测到超过指定字节大小的 DNS 数据包时向网络管理员发出警报,表明存在潜在的 DDoS 或 DoS 攻击。
为了构建此工具,我们将使用以下 Python 模块:
Pyshark: Wireshark数据包捕获工具的 Python 包装器,允许我们实时监控网络流量。
首先,我们先把所需要的库进行导入:
import pyshark
import argparse
from colorama import Fore, Style, init
# 重要:指定tshark路径(根据您提供的路径)
pyshark.tshark.tshark.TSHARK_PATH = r'E:\tshark.exe'
我们的工具以 Python 编写,核心逻辑封装在一个名为 DNSSecurityTool 的类中,具体实现步骤如下:
初始化:
在 __init__ 方法中,我们设置了监控的网络接口(我们选择了WLAN接口)和警报阈值(选择 50 字节便于展示)。
class DNSSecurityTool:
def __init__(self, interface='eth0', threshold=1000):
self.interface = interface
self.threshold = threshold
数据包回调:
packet_callback 方法实时分析每个捕获的数据包。一旦发现 DNS 数据包大小超过阈值,工具会立即发出红色警报,显示数据包大小和来源 IP。
def packet_callback(self, packet):
try:
if hasattr(packet, 'dns'):
packet_size = int(packet.length)
if packet_size > self.threshold:
src_ip = packet.ip.src
print(
f"{Fore.RED}【警报】检测到大流量DNS数据包!"
f"\n大小: {packet_size} 字节 | 来源IP: {src_ip}{Style.RESET_ALL}\n")
except AttributeError:
pass
开始监控:
start_monitoring 方法启动实时捕获,持续监控网络流量,直至用户手动停止。
def start_monitoring(self):
print(f"{Fore.GREEN}▶ 开始DNS流量监控(网卡:{self.interface})...{Style.RESET_ALL}")
try:
capture = pyshark.LiveCapture(
interface=self.interface,
tshark_path=r'E:\tshark.exe'
)
capture.apply_on_packets(self.packet_callback)
except KeyboardInterrupt:
print(f"\n{Fore.YELLOW}▶ 监控已被用户终止{Style.RESET_ALL}")
主执行块
if __name__ == "__main__":
init(autoreset=True) # 初始化颜色输出
# 中文化参数帮助信息
parser = argparse.ArgumentParser(description="DNS安全监控工具 - 用于检测DDoS/DoS攻击")
parser.add_argument("-i", "--interface",
type=str,
default='WLAN', # 默认使用WLAN接口
help="监控的网络接口名称(默认:WLAN)")
parser.add_argument("-t", "--threshold",
type=int,
default=1000,
help="触发警报的数据包大小阈值(单位:字节,默认:1000)")
args = parser.parse_args()
dns_tool = DNSSecurityTool(interface=args.interface, threshold=args.threshold)
dns_tool.start_monitoring()
Windows:
打开CMD执行:
cmd
ipconfig
可以看到我们正在使用的WLAN接口!
根据系统选择以下命令:
Windows(管理员权限运行):
python Demo.py -i "WLAN" -t 50
为了便于展示我们将阈值设置为50,在py文件所在目录下,运行cmd代码。
打开浏览器访问:
http://example.com
http://google.com
bash
# Windows:nslookup microsoft.comnslookup amazon.com# macOS/Linux:dig google.com ANYnslookup -type=any apple.com0
import pyshark
import argparse
from colorama import Fore, Style, init
# 重要:指定tshark路径(根据您提供的路径)
pyshark.tshark.tshark.TSHARK_PATH = r'E:\tshark.exe'
class DNSSecurityTool:
def __init__(self, interface='WLAN', threshold=1000): # 默认接口改为WLAN
self.interface = interface
self.threshold = threshold
def packet_callback(self, packet):
try:
if hasattr(packet, 'dns'):
packet_size = int(packet.length)
if packet_size > self.threshold:
src_ip = packet.ip.src
print(
f"{Fore.RED}【警报】检测到大流量DNS数据包!"
f"\n大小: {packet_size} 字节 | 来源IP: {src_ip}{Style.RESET_ALL}\n")
except AttributeError:
pass
def start_monitoring(self):
print(f"{Fore.GREEN}▶ 开始DNS流量监控(网卡:{self.interface})...{Style.RESET_ALL}")
try:
capture = pyshark.LiveCapture(
interface=self.interface,
tshark_path=r'E:\tshark.exe'
)
capture.apply_on_packets(self.packet_callback)
except KeyboardInterrupt:
print(f"\n{Fore.YELLOW}▶ 监控已被用户终止{Style.RESET_ALL}")
if __name__ == "__main__":
init(autoreset=True) # 初始化颜色输出
# 中文化参数帮助信息
parser = argparse.ArgumentParser(description="DNS安全监控工具 - 用于检测DDoS/DoS攻击")
parser.add_argument("-i", "--interface",
type=str,
default='WLAN', # 默认使用WLAN接口
help="监控的网络接口名称(默认:WLAN)")
parser.add_argument("-t", "--threshold",
type=int,
default=1000,
help="触发警报的数据包大小阈值(单位:字节,默认:1000)")
args = parser.parse_args()
dns_tool = DNSSecurityTool(interface=args.interface, threshold=args.threshold)
dns_tool.start_monitoring()