经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
如何通过 wireshark 捕获 C# 上传的图片
来源:cnblogs  作者:一线码农  时间:2023/11/17 9:19:55  对本文有异议

一:背景

1. 讲故事

这些天计划好好研究下tcp/ip,以及socket套接字,毕竟工控中设计到各种交互协议,如果只是模模糊糊的了解,对分析此类dump还是非常不利的,而研究协议最好的入手点就是用抓包工具 wireshark,废话不多说,这篇通过 wireshark 提取一个小图片作为入手。

二:wireshark 图片抓包

1. 捕获图片

为了方便演示,我们就用最简单的 http 上传图片的方式,客户端代码如下:

  1. <form method="post" action="/Home/Upload" enctype="multipart/form-data">
  2. <input type="file" name="file" />
  3. <button type="submit">Upload</button>
  4. </form>

接下来是server端代码,用 chatgpt 吐出来的代码做了一点简单修改。

  1. public class HomeController : Controller
  2. {
  3. private readonly ILogger<HomeController> _logger;
  4. private readonly IWebHostEnvironment _env;
  5. public HomeController(IWebHostEnvironment env)
  6. {
  7. _env = env;
  8. }
  9. [HttpPost]
  10. public async Task<IActionResult> Upload(IFormFile file)
  11. {
  12. if (file == null || file.Length == 0)
  13. {
  14. return BadRequest("Please select a file to upload.");
  15. }
  16. // 生成唯一的文件名
  17. var fileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);
  18. // 拼接文件保存路径
  19. var filePath = Path.Combine(_env.WebRootPath, "uploads", fileName);
  20. // 保存文件到磁盘
  21. using (var stream = new FileStream(filePath, FileMode.Create))
  22. {
  23. await file.CopyToAsync(stream);
  24. }
  25. return Ok("File uploaded successfully.");
  26. }
  27. }

接下来将 asp.net core 部署在虚拟机上,修改端口为80,appsettings.json 修改如下:

  1. {
  2. "Logging": {
  3. "LogLevel": {
  4. "Default": "Information",
  5. "Microsoft.AspNetCore": "Warning"
  6. }
  7. },
  8. "Kestrel": {
  9. "Endpoints": {
  10. "Http": {
  11. "Url": "http://0.0.0.0:80"
  12. }
  13. }
  14. }
  15. }

运行之后,一切正常,截图如下:

2. wireshark 捕获

这里我们将 wireshark 部署在 server (192.168.25.133)端,不过在开启之前有两点要注意:

  • 寻找到你需要采集流量包的网卡,比如我这里的 Ethernet0
  • 设置一个捕获过滤器,这样就不会把你的 wireshark 采集界面给卡死。

参考截图如下:

启动捕获后,在首页开始上传一个 1M左右的图片,在 wireshark 中可以看到这 1M 的图片被切割成了 791 个 tcp segment 发送。

接下来在 上图中的 Http 请求上点击右键,选择 Follow -> TCP Stream ,会自动打开本次 http 传输的全部内容,接下来记得做下面三个选择:

  • 选择正确的数据包流向
  • 数据格式为原始的Raw格式
  • Save as 保存到本地

详情截图如下:

根据 http 上传图片的格式,把内容中换行符之前和之后的二进制都去掉,而这个换行符的二进制表示为 0D0A,接下来打开 winhex,删掉 0D0A 之前和之后的所有多余字符。截图如下:

  1. 之前

  1. 之后

如果大家有点懵,可以观察一个正确的 PNG 在 WinHex 上的表现,选中多余的二进制之后做一个 delete 操作,然后重命名为 test.png,截图如下:

哈哈,一张图片映入眼帘,打完收工!

三:总结

wireshark 还是非常强大有意思的,相比呈现工具更多的还是需要对协议的理解,希望能对dump分析提供一些原料动力!

图片名称

原文链接:https://www.cnblogs.com/huangxincheng/p/17836202.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号