网络安全实验:我的第一次抓包体验
作者:网络安全学习者 实验环境:Kali Linux虚拟机 难度:⭐⭐ 适合小白
前言
作为一个刚入门网络安全的小白,我一直很好奇黑客是怎么获取别人账号密码的。这次在Kali虚拟机上做了一个完整的抓包实验,从零开始搭建了一个登录网站,然后用Wireshark成功抓取到了明文传输的账号密码。
重要提醒:本实验仅用于学习,严禁用于攻击他人!
实验目标
准备工作
我用的环境
- 虚拟机:Kali Linux(自带很多黑客工具)
- 编程语言:Python 3(Kali自带)
- 抓包工具:Wireshark(Kali自带)
检查工具是否安装
打开终端输入以下命令检查:
# 检查Python版本
python3 –version
# 检查Wireshark是否安装
wireshark –version
如果提示找不到命令,就安装一下:
sudo apt update
sudo apt install wireshark
第一步:搭建登录网站
1.1 创建项目文件夹
mkdir ~/login_demo
cd ~/login_demo
1.2 安装Flask框架
Flask是一个Python的网页开发框架,用起来很简单:
pip3 install flask
1.3 创建网站代码
用nano编辑器创建文件:
nano app.py
然后把下面的代码复制粘贴进去:
from flask import Flask, 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('/')
def index():
return render_template_string(LOGIN_PAGE)
@app.route('/login', methods=['POST'])
def login():
username = request.form.get('username')
password = request.form.get('password')
# 验证用户
if username in users and users[username] == password:
return render_template_string(SUCCESS_PAGE, username=username)
else:
return render_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
打开一个新的终端(保持网站运行),输入:
sudo wireshark
2.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 查看明文密码
在下方的详细信息面板:
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
这就是我们通过网络发送的数据,完全没有加密!
实验结果分析
为什么能抓到密码?
HTTPS和HTTP的区别
| 加密 | ❌ 明文传输 | ✅ 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接口的包
解决方法:
sudo chmod +x /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
问题2:浏览器自动跳转HTTPS
有些浏览器记住了网站必须用HTTPS访问(HSTS机制)
解决方法:
- 用隐私模式/无痕模式打开浏览器
- 或者清除浏览器缓存
问题3:Flask提示端口被占用
解决方法:
# 查看哪个程序占用了5000端口
sudo netstat -tuln | grep 5000
# 杀掉那个进程(PID是进程号)
sudo kill -9 <PID>
进阶玩法
玩法1:抓其他机器的流量
ip addr show
http://[Kali的IP]:5000
玩法2:用命令行抓包(tcpdump)
sudo tcpdump -i lo -A -s 0 'tcp port 5000'
- -i lo:监听本地回环
- -A:用ASCII显示内容
- -s 0:抓取完整数据包
实验总结
这次实验让我明白了:
作为网络安全的学习者,我们要:
- 🔐 用这些知识保护系统安全
- ⚖️ 遵守法律法规和职业道德
- 📚 持续学习新的攻防技术
清理环境
实验做完记得清理:
# 停止Flask(在运行Flask的终端按Ctrl+C)
# 停止Wireshark抓包
# 删除测试文件(可选)
cd ~
rm -rf login_demo
最后的话
这是我第一次完整地做抓包实验,从搭建网站到成功抓取密码,整个过程大概花了1个小时。虽然是个简单的小项目,但让我对网络安全有了更直观的认识。
如果你也是小白,强烈建议亲手试一遍!看别人的教程和自己动手的感觉完全不一样。
记住:学习黑客技术是为了更好地防御,而不是攻击他人!
📝 本文档由作者原创 💻 实验环境:Kali Linux 📅 完成日期:2026年 ⚠️ 仅供学习交流,严禁用于非法用途
参考资料
- Flask官方文档:https://flask.palletsprojects.com/
- Wireshark用户手册:>https://www.wireshark.org/docs/wsug_html_chunked/
- HTTP协议详解:MDN Web Docs
- 《白帽子讲Web安全》- 吴翰清




