网络安全实验:我的第一次抓包体验
作者:网络安全学习者
实验环境:Kali Linux虚拟机
难度:⭐⭐ 适合小白
前言
作为一个刚入门网络安全的小白,我一直很好奇黑客是怎么获取别人账号密码的。这次在Kali虚拟机上做了一个完整的抓包实验,从零开始搭建了一个登录网站,然后用Wireshark成功抓取到了明文传输的账号密码。
重要提醒:本实验仅用于学习,严禁用于攻击他人!
实验目标
- 搭建一个简单的登录网站
- 学会使用Wireshark抓包工具
- 抓取HTTP明文传输的账号密码
- 理解为什么网站必须使用HTTPS
准备工作
我用的环境
- 虚拟机:Kali Linux(自带很多黑客工具)
- 编程语言:Python 3(Kali自带)
- 抓包工具:Wireshark(Kali自带)
检查工具是否安装
打开终端输入以下命令检查:
# 检查Python版本python3--version# 检查Wireshark是否安装wireshark--version如果提示找不到命令,就安装一下:
sudoaptupdatesudoaptinstallwireshark第一步:搭建登录网站
1.1 创建项目文件夹
mkdir~/login_democd~/login_demo1.2 安装Flask框架
Flask是一个Python的网页开发框架,用起来很简单:
pip3installflask1.3 创建网站代码
用nano编辑器创建文件:
nanoapp.py然后把下面的代码复制粘贴进去:
fromflaskimportFlask,request,render_template_string,redirect,url_for app=Flask(__name__)# 模拟用户数据库(明文存储,用于演示)users={'admin':'admin123','test':'test456'}# 简单的HTML模板LOGIN_PAGE=''' <!DOCTYPE html> <html> <head> <title>登录页面 - 安全测试</title> <style> body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .login-box { background: white; padding: 40px; border-radius: 10px; box-shadow: 0 10px 25px rgba(0,0,0,0.2); width: 300px; } h2 { text-align: center; color: #333; margin-bottom: 30px; } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 5px; color: #555; font-weight: bold; } input[type="text"], input[type="password"] { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 5px; box-sizing: border-box; font-size: 14px; } button { width: 100%; padding: 12px; background: #667eea; color: white; border: none; border-radius: 5px; font-size: 16px; cursor: pointer; font-weight: bold; } button:hover { background: #5568d3; } .error { color: red; text-align: center; margin-bottom: 15px; } .info { margin-top: 20px; padding: 15px; background: #f0f0f0; border-radius: 5px; font-size: 12px; } .info h4 { margin-top: 0; color: #667eea; } </style> </head> <body> <div class="login-box"> <h2>用户登录</h2> {% if error %} <p class="error">{{ error }}</p> {% endif %} <form method="POST" action="/login"> <div class="form-group"> <label for="username">用户名:</label> <input type="text" id="username" name="username" required> </div> <div class="form-group"> <label for="password">密码:</label> <input type="password" id="password" name="password" required> </div> <button type="submit">登录</button> </form> <div class="info"> <h4>测试账号:</h4> <p>用户名: admin<br>密码: admin123</p> <p>用户名: test<br>密码: test456</p> </div> </div> </body> </html> '''SUCCESS_PAGE=''' <!DOCTYPE html> <html> <head> <title>登录成功</title> <style> body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .success-box { background: white; padding: 40px; border-radius: 10px; box-shadow: 0 10px 25px rgba(0,0,0,0.2); text-align: center; } h2 { color: #4CAF50; } .user-info { margin: 20px 0; padding: 20px; background: #f0f0f0; border-radius: 5px; } a { display: inline-block; margin-top: 20px; padding: 10px 20px; background: #667eea; color: white; text-decoration: none; border-radius: 5px; } a:hover { background: #5568d3; } </style> </head> <body> <div class="success-box"> <h2>✓ 登录成功!</h2> <div class="user-info"> <p><strong>欢迎:</strong> {{ username }}</p> <p>您已成功登录系统</p> </div> <a href="/">返回登录页</a> </div> </body> </html> '''@app.route('/')defindex():returnrender_template_string(LOGIN_PAGE)@app.route('/login',methods=['POST'])deflogin():username=request.form.get('username')password=request.form.get('password')# 验证用户ifusernameinusersandusers[username]==password:returnrender_template_string(SUCCESS_PAGE,username=username)else:returnrender_template_string(LOGIN_PAGE,error='用户名或密码错误!')if__name__=='__main__':# 使用HTTP(明文传输)用于演示抓包# 0.0.0.0 允许外部访问app.run(host='0.0.0.0',port=5000,debug=True)保存文件:按Ctrl+X,然后按Y,最后按Enter
1.4 启动网站
python3 app.py看到这样的提示就成功了:
* Running on http://127.0.0.1:5000 * Running on http://0.0.0.0:5000不要关闭这个终端!让它一直运行着。
第二步:用Wireshark抓包
2.1 打开Wireshark
打开一个新的终端(保持网站运行),输入:
sudowireshark2.2 选择网络接口
Wireshark打开后会看到一堆网络接口,我们选择Loopback: lo(本地回环接口)
2.3 设置过滤器
在Wireshark顶部的过滤栏输入:
http.request.method == "POST"这样只会显示POST请求,方便我们找到登录数据。
2.4 开始抓包
点击左上角的蓝色鲨鱼图标(或按Ctrl+E)开始抓包。
第三步:测试登录
3.1 打开浏览器
在Kali里打开Firefox浏览器
3.2 访问网站
地址栏输入:
http://127.0.0.1:5000你会看到一个紫色渐变背景的登录页面
3.3 输入账号密码
- 用户名:
admin - 密码:
admin123
点击登录按钮
第四步:查看抓包结果(重点!)
4.1 回到Wireshark
你会看到多了一条数据,大概长这样:
POST /login HTTP/1.1点击这条记录
4.2 查看明文密码
在下方的详细信息面板:
- 找到Hypertext Transfer Protocol这一行,点击展开
- 找到HTML Form URL Encoded这一项
- 你会看到:
Form item: "username" = "admin" Form item: "password" = "admin123"震惊了!账号密码完全暴露了!
4.3 查看完整数据流
右键点击这条记录 →Follow→HTTP Stream
你会看到完整的HTTP请求:
POST /login HTTP/1.1 Host: 127.0.0.1:5000 Content-Type: application/x-www-form-urlencoded Content-Length: 32 username=admin&password=admin123这就是我们通过网络发送的数据,完全没有加密!
实验结果分析
为什么能抓到密码?
- HTTP是明文协议:数据在网络上传输时没有任何加密
- 同一网络可被监听:只要在同一个局域网,就能用Wireshark抓包
- POST数据也不安全:很多人以为POST比GET安全,其实在HTTP下都是明文
HTTPS和HTTP的区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 加密 | ❌ 明文传输 | ✅ TLS/SSL加密 |
| 安全性 | ❌ 可被窃听 | ✅ 无法解密 |
| 浏览器显示 | ⚠️ “不安全” | 🔒 锁图标 |
| 端口 | 80 | 443 |
在Wireshark里抓HTTPS流量,你只会看到一堆乱码(加密数据),根本看不到密码!
Wireshark常用过滤器
学会这些过滤器,抓包效率翻倍:
# 只看HTTP流量http# 只看POST请求http.request.method=="POST"# 看包含"password"关键词的数据包http contains"password"# 看特定端口的流量tcp.port==5000# 看特定IP的流量ip.addr==127.0.0.1# 组合条件http.request.method=="POST"and http contains"login"我遇到的问题和解决方法
问题1:Wireshark抓不到lo接口的包
解决方法:
sudochmod+x /usr/bin/dumpcapsudosetcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap问题2:浏览器自动跳转HTTPS
有些浏览器记住了网站必须用HTTPS访问(HSTS机制)
解决方法:
- 用隐私模式/无痕模式打开浏览器
- 或者清除浏览器缓存
问题3:Flask提示端口被占用
解决方法:
# 查看哪个程序占用了5000端口sudonetstat-tuln|grep5000# 杀掉那个进程(PID是进程号)sudokill-9<PID>进阶玩法
玩法1:抓其他机器的流量
- 查看Kali的IP地址:
ipaddr show- 在同一网络的另一台电脑访问:
http://[Kali的IP]:5000- Wireshark选择eth0或wlan0接口抓包
玩法2:用命令行抓包(tcpdump)
sudotcpdump-ilo-A-s0'tcp port 5000'-i lo:监听本地回环-A:用ASCII显示内容-s 0:抓取完整数据包
实验总结
这次实验让我明白了:
- ✅HTTP真的很不安全,明文传输的数据任何人都能看到
- ✅Wireshark很强大,能看到网络上传输的所有数据
- ✅HTTPS是必需的,保护用户隐私的基本要求
- ✅网络安全很重要,一个小疏忽就可能导致数据泄露
作为网络安全的学习者,我们要:
- 🔐 用这些知识保护系统安全
- ⚖️ 遵守法律法规和职业道德
- 📚 持续学习新的攻防技术
清理环境
实验做完记得清理:
# 停止Flask(在运行Flask的终端按Ctrl+C)# 停止Wireshark抓包# 删除测试文件(可选)cd~rm-rflogin_demo最后的话
这是我第一次完整地做抓包实验,从搭建网站到成功抓取密码,整个过程大概花了1个小时。虽然是个简单的小项目,但让我对网络安全有了更直观的认识。
如果你也是小白,强烈建议亲手试一遍!看别人的教程和自己动手的感觉完全不一样。
记住:学习黑客技术是为了更好地防御,而不是攻击他人!
📝 本文档由作者原创
💻 实验环境:Kali Linux
📅 完成日期:2026年
⚠️ 仅供学习交流,严禁用于非法用途
参考资料
- Flask官方文档:https://flask.palletsprojects.com/
- Wireshark用户手册:>https://www.wireshark.org/docs/wsug_html_chunked/
- HTTP协议详解:MDN Web Docs
- 《白帽子讲Web安全》- 吴翰清