搞网络安全的人,手里没几个趁手的工具可不行。每天面对日志分析、端口扫描、数据抓包,如果全靠复制粘贴逻辑,代码很快就会乱成一锅粥。这时候,Python 的面向对象编程(OOP)就成了整理思路、提高效率的好帮手。
把攻击检测当成一个‘对象’来设计
比如你要写个简单的登录异常检测脚本。传统写法可能就是一堆 if-else 判断登录失败次数。但如果用面向对象的方式,可以把“用户登录行为”封装成一个类:
class LoginMonitor:
def __init__(self, user_id, threshold=5):
self.user_id = user_id
self.failed_attempts = 0
self.threshold = threshold
self.locked = False
def failed(self):
if not self.locked:
self.failed_attempts += 1
if self.failed_attempts >= self.threshold:
self.locked = True
print(f"[警告] 用户 {self.user_id} 账号已被锁定")
def success(self):
self.failed_attempts = 0
self.locked = False
这样每个用户都有自己的监控实例,数据和行为绑在一起,不容易出错。以后加功能,比如记录时间戳、发邮件告警,直接往类里加方法就行,不影响其他部分。
扫描器也能模块化
写端口扫描工具时,很多人一开始就把所有代码塞进一个函数。但如果你把它拆成 Scanner 类,就可以灵活复用:
import socket
class PortScanner:
def __init__(self, target_ip, ports=None):
self.target_ip = target_ip
self.ports = ports or [80, 443, 22, 21]
self.open_ports = []
def scan_port(self, port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((self.target_ip, port))
if result == 0:
self.open_ports.append(port)
sock.close()
except Exception as e:
pass
def run(self):
for port in self.ports:
self.scan_port(port)
return self.open_ports
以后想换个目标 IP 或者改端口列表,直接 new 一个新对象就行。多个扫描任务互不干扰,调试也方便。
继承让规则共享更简单
在做 Web 安全检测时,SQL注入、XSS、CSRF 虽然类型不同,但都有“检测输入”“生成报告”这些共性。可以用基类定义通用结构:
class SecurityRule:
def __init__(self):
self.matches = []
def detect(self, payload):
raise NotImplementedError
def report(self):
return {"rule": self.__class__.__name__, "hits": len(self.matches)}
class SQLiRule(SecurityRule):
def detect(self, payload):
keywords = ["select", "union", "--", "' or 1=1"]
if any(k in payload.lower() for k in keywords):
self.matches.append(payload)
return True
return False
以后加新规则,继承一下就能用统一接口调用,日志输出格式也一致,团队协作省心不少。
说到底,Python 面向对象不是为了炫技,而是让安全工具更清晰、更易维护。当你写的脚本从“能跑”变成“好改”,才是真正提升了实战能力。