刚入门网络安全时,很多人会陷入 “想实践却不敢动” 的困境:想测试漏洞怕触犯法律,想分析数据却不知从何下手。而 Python 作为网络安全领域的 “万能工具”,入门简单且生态丰富,恰好能解决这个问题 —— 从基础的文本分析、日志审计到简单的安全检测,很多低风险、高实用的场景都能作为练手项目,既巩固 Python 基础,又能积累安全实操经验。
以下 5 个场景,全部基于合法合规的本地 / 公开数据,只需要掌握 Python 基础语法(文件操作、循环、条件判断、简单模块调用)就能完成,非常适合刚入门的同学练手。
一、场景 1:弱密码字典生成器(密码安全基础)
场景需求
在渗透测试或自查时,弱密码是最常见的安全隐患。这个练手项目需要实现:根据常见弱密码规则(如 “姓名 + 生日”“手机号后 6 位”“密码 + 年份”),批量生成弱密码字典,用于后续的密码强度检测或自查(仅用于合法授权的测试)。
为什么适合入门?
- 核心用到 Python 的字符串拼接、循环、列表操作,都是入门必学知识点;
- 逻辑简单,可逐步扩展规则,从 “固定前缀 + 数字” 到 “多组合规则”,难度可控;
- 实用性强,生成的字典可用于自己的账号密码自查(比如检测是否使用了易被破解的弱密码)。
实现思路与简化代码
核心思路:
- 定义基础弱密码库(如
["123456", "password", "admin", "root"]); - 定义常用后缀(如年份
2020-2025、特殊字符["@", "!", "#"]); - 通过循环组合基础密码和后缀,生成完整字典并写入文件。
简化代码:
# 弱密码字典生成器
def generate_weak_passwords():
# 1. 基础弱密码库
base_passwords = ["123456", "password", "admin", "root", "qwerty", "123321"]
# 2. 常用后缀(年份、特殊字符)
years = [str(year) for year in range(2010, 2026)] # 2010-2025
symbols = ["", "@", "!", "#", "123"] # 空字符表示不加特殊字符
# 3. 组合生成密码
passwords = []
for base in base_passwords:
for year in years:
for sym in symbols:
# 组合:基础密码+年份+特殊字符(如 1234562023@)
pwd = base + year + sym
passwords.append(pwd)
# 4. 写入文件
with open("weak_passwords.txt", "w", encoding="utf-8") as f:
for pwd in passwords:
f.write(pwd + "n")
print(f"字典生成完成!共{len(passwords)}个弱密码,已保存到 weak_passwords.txt")
# 执行生成
generate_weak_passwords()
扩展练习(进阶方向):
- 加入 “姓名拼音 + 生日” 规则(如
zhang319900101),需要定义姓名列表和生日格式;
二、场景 2:日志敏感信息检测(数据安全审计)
场景需求
服务器日志、应用日志中可能包含敏感信息(如手机号、身份证号、邮箱),如果泄露会造成安全风险。这个项目需要实现:读取本地日志文件,用正则表达式匹配并提取敏感信息,输出检测结果(用于日志脱敏自查)。
为什么适合入门?
- 用到 Python 的文件读取、正则表达式(
re模块),都是安全领域高频技能; - 不需要复杂逻辑,正则表达式可逐步学习(先匹配简单格式,再扩展复杂规则);
- 贴近实际工作:企业安全审计中,日志脱敏是基础工作,学会后能直接应用。
实现思路与简化代码
核心思路:
- 定义敏感信息的正则表达式规则(手机号、身份证号、邮箱);
- 读取本地日志文件(可自己创建测试日志,或用公开的日志样本);
简化代码:
import re
# 日志敏感信息检测器
def detect_sensitive_info(log_file):
# 1. 定义正则规则(简化版)
patterns = {
"手机号": r"1[3-9]d{9}", # 匹配11位手机号
"身份证号": r"d{17}[dXx]", # 匹配18位身份证号(最后一位可能是X)
"邮箱": r"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9_-]+" # 匹配邮箱格式
}
# 2. 初始化统计结果
sensitive_info = {key: [] for key in patterns.keys()}
# 3. 读取日志文件并匹配
try:
with open(log_file, "r", encoding="utf-8") as f:
lines = f.readlines()
for line_num, line in enumerate(lines, 1): # 记录行号
for info_type, pattern in patterns.items():
# 匹配所有符合规则的内容
matches = re.findall(pattern, line)
if matches:
# 去重并添加行号信息
unique_matches = list(set(matches))
sensitive_info[info_type].extend([(line_num, match) for match in unique_matches])
# 4. 输出检测结果
print("=== 日志敏感信息检测结果 ===")
for info_type, infos in sensitive_info.items():
if infos:
print(f"n{info_type}(共{len(infos)}条):")
for line_num, info in infos:
print(f" 行号{line_num}:{info}")
else:
print(f"n{info_type}:无")
except FileNotFoundError:
print(f"错误:找不到日志文件 {log_file}")
# 测试:创建测试日志文件(也可替换为自己的日志文件路径)
with open("test_log.txt", "w", encoding="utf-8") as f:
f.write("用户登录:手机号13812345678,邮箱test@example.comn")
f.write("注册信息:身份证号110101199001011234,手机号13987654321n")
f.write("操作日志:2024-05-20 10:00,用户admin执行了查询操作n")
# 执行检测
detect_sensitive_info("test_log.txt")
扩展练习(进阶方向):
- 实现敏感信息脱敏(将手机号中间 4 位替换为
****,写入新日志文件);
三、场景 3:端口开放检测器(网络基础扫描)
场景需求
端口开放情况是网络安全的重要指标(如 80 端口开放表示 Web 服务可访问,3389 端口开放可能存在远程登录风险)。这个项目需要实现:检测指定 IP(推荐本地 IP 或自己搭建的测试服务器)的常用端口是否开放,输出开放端口列表。
为什么适合入门?
- 用到 Python 的
socket模块(基础网络编程),语法简单易理解; - 无法律风险:仅检测自己有权限的 IP(如本地
127.0.0.1、自己的云服务器); - 能直观了解网络通信的基本原理,为后续学习渗透测试打基础。
实现思路与简化代码
核心思路:
- 定义要检测的常用端口(如
80、443、22、3389等); - 利用
socket模块创建 TCP 连接,尝试连接目标 IP 和端口; - 根据连接结果判断端口是否开放(连接成功 = 开放,超时 / 失败 = 关闭)。
简化代码:
import socket
import time
# 端口开放检测器(仅用于合法授权的IP检测!)
def scan_ports(target_ip, ports, timeout=1):
print(f"=== 开始检测 {target_ip} 的端口开放情况 ===")
open_ports = []
for port in ports:
try:
# 创建TCP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout) # 设置超时时间(避免卡住)
# 尝试连接
result = sock.connect_ex((target_ip, port)) # 0表示连接成功
if result == 0:
open_ports.append(port)
print(f"端口 {port}:开放")
else:
print(f"端口 {port}:关闭")
sock.close() # 关闭连接
time.sleep(0.1) # 避免扫描过快
except Exception as e:
print(f"端口 {port}:检测失败 - {e}")
# 输出汇总
print(f"n=== 检测完成 ===")
if open_ports:
print(f"开放的端口:{open_ports}")
else:
print("未发现开放端口")
# 测试:检测本地IP(127.0.0.1)的常用端口
target_ip = "127.0.0.1" # 替换为自己的测试IP(如云服务器IP)
common_ports = [21, 22, 80, 443, 3306, 3389, 5432] # 常用端口列表
scan_ports(target_ip, common_ports)
注意事项:
- 严禁检测未授权的 IP:未经允许扫描他人服务器属于违法行为,仅可用于自己的设备或明确授权的测试环境;
- 部分端口可能被防火墙拦截,检测结果显示 “关闭” 不一定代表端口未开放,仅表示无法建立 TCP 连接。
扩展练习(进阶方向):
- 增加端口对应的服务识别(如 80 端口对应 HTTP 服务,22 端口对应 SSH 服务);
- 实现多线程扫描(提高扫描速度,需学习
threading模块);
四、场景 4:文件哈希校验工具(文件完整性验证)
场景需求
文件哈希值(如 MD5、SHA256)是文件的 “数字指纹”,一旦文件被篡改(如植入病毒、修改内容),哈希值会发生变化。这个项目需要实现:计算本地文件的 MD5/SHA256 哈希值,或验证文件哈希值是否与给定值一致(用于检测文件是否被篡改)。
为什么适合入门?
- 用到 Python 的
hashlib模块(内置哈希算法库),调用简单; - 逻辑清晰:读取文件→分块计算哈希→输出结果,无复杂语法;
- 实用性极强:日常下载软件、传输文件时,可用于验证文件完整性(避免下载到篡改文件)。
实现思路与简化代码
核心思路:
- 选择哈希算法(MD5 或 SHA256,推荐 SHA256 更安全);
- 支持 “仅计算哈希” 和 “验证哈希” 两种模式。
简化代码:
import hashlib
# 文件哈希校验工具
def file_hash_check(file_path, algorithm="sha256", expected_hash=None):
# 1. 选择哈希算法
if algorithm.lower() == "md5":
hash_obj = hashlib.md5()
elif algorithm.lower() == "sha256":
hash_obj = hashlib.sha256()
else:
print("错误:不支持的哈希算法,仅支持md5和sha256")
return
# 2. 分块读取文件并计算哈希
try:
with open(file_path, "rb") as f: # 二进制模式读取
chunk_size = 4096 # 每次读取4KB(适配大文件)
while chunk := f.read(chunk_size):
hash_obj.update(chunk)
file_hash = hash_obj.hexdigest() # 获取哈希值(十六进制字符串)
# 3. 输出结果
print(f"=== {algorithm.upper()} 哈希校验结果 ===")
print(f"文件路径:{file_path}")
print(f"计算得到的哈希值:{file_hash}")
# 4. 验证哈希值(如果提供了预期值)
if expected_hash:
if file_hash.lower() == expected_hash.lower():
print("验证结果:一致(文件未被篡改)")
else:
print("验证结果:不一致(文件可能被篡改!)")
except FileNotFoundError:
print(f"错误:找不到文件 {file_path}")
except Exception as e:
print(f"错误:计算哈希值失败 - {e}")
# 测试1:仅计算文件的SHA256哈希值
file_hash_check("test_log.txt", algorithm="sha256")
# 测试2:验证文件的MD5哈希值(假设已知预期值)
# 先计算test_log.txt的MD5,再替换下面的expected_hash值进行验证
expected_md5 = "d41d8cd98f00b204e9800998ecf8427e" # 示例:空文件的MD5
file_hash_check("test_log.txt", algorithm="md5", expected_hash=expected_md5)
扩展练习(进阶方向):
- 支持批量计算文件夹下所有文件的哈希值,并写入 CSV 文件;
- 增加 “哈希值对比” 功能(输入两个文件,判断是否是同一文件);
- 实现大文件进度显示(计算哈希时显示进度条,需学习
tqdm模块)。
五、场景 5:钓鱼邮件关键词检测器(邮件安全分析)
场景需求
钓鱼邮件是网络诈骗的常用手段,通常包含 “中奖”“转账”“验证码”“紧急通知” 等关键词。这个项目需要实现:读取本地邮件文本(或输入邮件内容),匹配钓鱼邮件高频关键词,判断邮件是否存在钓鱼风险。
为什么适合入门?
- 用到 Python 的字符串处理、列表操作、正则匹配,都是基础技能;
- 贴近日常安全:学会后可用于自己收到的可疑邮件自查,提高安全意识。
实现思路与简化代码
核心思路:
- 定义钓鱼邮件高频关键词库(分 “高风险”“中风险”);
- 匹配关键词,统计风险等级(命中高风险关键词→高危,命中中风险→中危);
简化代码:
import re
# 钓鱼邮件关键词检测器
def phishing_email_detector(email_content):
# 1. 定义关键词库(可根据实际情况扩展)
risk_keywords = {
"高风险": ["中奖", "领奖", "转账", "汇款", "验证码", "密码重置", "紧急通知", "账户冻结", "洗钱", "诈骗"],
"中风险": ["点击链接", "下载附件", "登录账号", "身份验证", "资金安全", "限时领取", "免费领取"]
}
# 2. 初始化检测结果
detected = {key: [] for key in risk_keywords.keys()}
# 3. 匹配关键词(不区分大小写)
email_lower = email_content.lower()
for risk_level, keywords in risk_keywords.items():
for keyword in keywords:
# 用正则匹配完整关键词(避免部分匹配,如“转账”不会匹配“转账记录”中的“转账”)
pattern = re.compile(rf"b{re.escape(keyword)}b", re.IGNORECASE)
if pattern.search(email_lower):
detected[risk_level].append(keyword)
# 4. 判断风险等级
if detected["高风险"]:
risk = "高危"
tip = "⚠️ 该邮件存在强烈钓鱼风险!请勿点击链接、下载附件或提供任何个人信息!"
elif detected["中风险"]:
risk = "中危"
tip = "⚠️ 该邮件存在钓鱼风险!请谨慎核实发件人身份,切勿轻易提供敏感信息!"
else:
risk = "低危"
tip = "✅ 未检测到高风险钓鱼关键词,可进一步核实发件人身份。"
# 5. 输出结果
print("=== 钓鱼邮件检测结果 ===")
print(f"风险等级:{risk}")
print(f"风险提示:{tip}")
for level, words in detected.items():
if words:
print(f"n{level}关键词:{', '.join(words)}")
# 测试1:读取本地邮件文本文件
with open("test_email.txt", "w", encoding="utf-8") as f:
f.write("【紧急通知】您的账户已冻结,请点击链接https://fake-site.com重置密码,"
"需提供验证码123456完成身份验证,否则将影响资金安全!")
with open("test_email.txt", "r", encoding="utf-8") as f:
email_content = f.read()
phishing_email_detector(email_content)
# 测试2:直接输入邮件内容
print("n" + "="*50 + "n")
phishing_email_detector("您好,您参与的活动中奖了,请提供银行卡号和身份证号领取奖品!")
扩展练习(进阶方向):
- 增加发件人域名检测(如识别伪造的官方域名,如
baidu.com vs ba1du.com); - 支持读取 EML 格式邮件文件(需学习
email模块); - 实现关键词权重评分(不同关键词对应不同分值,总分超过阈值判定为高风险)。
最后想说:安全练手,合规第一!
以上 5 个场景,全部基于 “合法、合规、无风险” 的原则设计 —— 仅使用本地文件、公开样本或自己有权限的设备,不会涉及他人隐私或违法操作。作为刚入门网络安全的学习者,一定要牢记:任何安全实践都必须在合法授权的范围内进行,切勿未经允许扫描他人服务器、破解他人账号或获取他人敏感信息。
这些练手项目的核心价值,不仅是巩固 Python 基础,更重要的是培养 “安全思维”—— 学会用技术解决实际安全问题,同时建立 “合规意识”。每个项目都可以从简单版本开始,逐步扩展功能(比如从单线程端口扫描到多线程,从固定关键词到动态关键词库),随着技能提升,再尝试更复杂的安全工具开发(如漏洞扫描脚本、日志分析平台)。
如果练手过程中遇到问题,不妨回头看看 Python 基础语法(比如循环效率、正则规则),也可以参考开源安全工具(如nmap的端口扫描逻辑、hashcat的字典生成规则)的实现思路。安全学习是一个 “实践 - 总结 - 再实践” 的过程,慢慢积累,你会发现 Python 能帮你解决越来越多的安全问题~