网络安全实验-HTTP抓包教程
2026/7/18 4:28:39 网站建设 项目流程

网络安全实验:我的第一次抓包体验

作者:网络安全学习者
实验环境:Kali Linux虚拟机
难度:⭐⭐ 适合小白

前言

作为一个刚入门网络安全的小白,我一直很好奇黑客是怎么获取别人账号密码的。这次在Kali虚拟机上做了一个完整的抓包实验,从零开始搭建了一个登录网站,然后用Wireshark成功抓取到了明文传输的账号密码。

重要提醒:本实验仅用于学习,严禁用于攻击他人!


实验目标

  1. 搭建一个简单的登录网站
  2. 学会使用Wireshark抓包工具
  3. 抓取HTTP明文传输的账号密码
  4. 理解为什么网站必须使用HTTPS

准备工作

我用的环境

  • 虚拟机:Kali Linux(自带很多黑客工具)
  • 编程语言:Python 3(Kali自带)
  • 抓包工具:Wireshark(Kali自带)

检查工具是否安装

打开终端输入以下命令检查:

# 检查Python版本python3--version# 检查Wireshark是否安装wireshark--version

如果提示找不到命令,就安装一下:

sudoaptupdatesudoaptinstallwireshark

第一步:搭建登录网站

1.1 创建项目文件夹

mkdir~/login_democd~/login_demo

1.2 安装Flask框架

Flask是一个Python的网页开发框架,用起来很简单:

pip3installflask

1.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

打开一个新的终端(保持网站运行),输入:

sudowireshark

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 查看明文密码

在下方的详细信息面板:

  1. 找到Hypertext Transfer Protocol这一行,点击展开
  2. 找到HTML Form URL Encoded这一项
  3. 你会看到:
Form item: "username" = "admin" Form item: "password" = "admin123"

震惊了!账号密码完全暴露了!

4.3 查看完整数据流

右键点击这条记录 →FollowHTTP 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

这就是我们通过网络发送的数据,完全没有加密!


实验结果分析

为什么能抓到密码?

  1. HTTP是明文协议:数据在网络上传输时没有任何加密
  2. 同一网络可被监听:只要在同一个局域网,就能用Wireshark抓包
  3. POST数据也不安全:很多人以为POST比GET安全,其实在HTTP下都是明文

HTTPS和HTTP的区别

特性HTTPHTTPS
加密❌ 明文传输✅ TLS/SSL加密
安全性❌ 可被窃听✅ 无法解密
浏览器显示⚠️ “不安全”🔒 锁图标
端口80443

在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:抓其他机器的流量

  1. 查看Kali的IP地址:
ipaddr show
  1. 在同一网络的另一台电脑访问:
http://[Kali的IP]:5000
  1. Wireshark选择eth0wlan0接口抓包

玩法2:用命令行抓包(tcpdump)

sudotcpdump-ilo-A-s0'tcp port 5000'
  • -i lo:监听本地回环
  • -A:用ASCII显示内容
  • -s 0:抓取完整数据包

实验总结

这次实验让我明白了:

  1. HTTP真的很不安全,明文传输的数据任何人都能看到
  2. Wireshark很强大,能看到网络上传输的所有数据
  3. HTTPS是必需的,保护用户隐私的基本要求
  4. 网络安全很重要,一个小疏忽就可能导致数据泄露

作为网络安全的学习者,我们要:

  • 🔐 用这些知识保护系统安全
  • ⚖️ 遵守法律法规和职业道德
  • 📚 持续学习新的攻防技术

清理环境

实验做完记得清理:

# 停止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安全》- 吴翰清

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询