一:背景

1. 讲故事

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

二:wireshark 图片抓包

1. 捕获图片

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


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

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


public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IWebHostEnvironment _env; public HomeController(IWebHostEnvironment env)
{
_env = env;
} [HttpPost]
public async Task<IActionResult> Upload(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest("Please select a file to upload.");
} // 生成唯一的文件名
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName); // 拼接文件保存路径
var filePath = Path.Combine(_env.WebRootPath, "uploads", fileName); // 保存文件到磁盘
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
} return Ok("File uploaded successfully.");
}
}

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


{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:80"
}
}
}
}

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

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分析提供一些原料动力!

如何通过 wireshark 捕获 C# 上传的图片的更多相关文章

  1. thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印

    今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...

  2. ASP.NET、JAVA跨服务器远程上传文件(图片)的相关解决方案整合

    一.图片提交例: A端--提交图片 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string u ...

  3. 如何预览将要上传的图片-使用H5的FileAPI

    这篇将要说的东西已经不新鲜了. 参考资料: Reading files in JavaScript using the File APIs (鉴于作者在美国, 我姑且认为作者母语是英语, 当然链接中有 ...

  4. js上传压缩图片

    原文链接:http://blog.csdn.net/iefreer/article/details/53039848 手机用户拍的照片通常会有2M以上,这对服务器带宽产生较大压力. 因此在某些应用下( ...

  5. php 实现接收客户端上传的图片

    今天,遇到一个服务端接收客户端上传图片的需求,经过学习.我写了个简单的demo 以备下次学习. 首先服务器接收的发送图片的请求一定要是post请求,而且请求一定要加上 enctype="mu ...

  6. KindEditor上传本地图片在ASP.NET MVC的配置

    http://www.cnblogs.com/upupto/archive/2010/08/24/1807202.html 本文解决KindEditor上传本地图片在ASP.NET MVC中的配置. ...

  7. .net mvc4 利用 kindeditor 上传本地图片

    http://blog.csdn.net/ycwol/article/details/41824371?utm_source=tuicool&utm_medium=referral 最近在用k ...

  8. 解决uploadify多图片上传部分图片丢失,且不提示任何错误的问题

    这两天用到uploadify的flash版本进行批量图片上传并生成缩略图的功能,之前用uploadify用的好好的,这次突然出现了一个奇怪的问题. 问题描述如下:当我选择单个图片上传的时候,图片上传都 ...

  9. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  10. ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上传目录的尺寸限制

    我曾经试过使用JSAjaxFileUploader插件来把文件.照片以异步的方式上传,就像"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01- ...

随机推荐

  1. Linux 安装:中文manpages

    Linux 中文man手册安装 bash 脚本 wget https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5 ...

  2. 安装.NET Framework4.5以上版本受阻怎么办?

    安装和卸载 .NET Framework 受阻疑难解答 - .NET Framework | Microsoft Learn Windows RT 8.1.Windows 8.1 和 Windows ...

  3. PyQt5实时刷新

    对于执行很耗时的程序来说,由于PyQt需要等待程序执行完毕才能进行下一步,这个过程表现在界面上就是卡顿,而如果需要执行这个耗时程序时不断的刷新界面.那么就可以使用QApplication.proces ...

  4. (转) [Android测试] AS+Appium+Java+Win自动化测试之三: 基础知识和Appium界面

    一.把上一章的demo先看懂 AndroidContactsTest.Java public class AndroidContactsTest { //Driver private AppiumDr ...

  5. composer 的使用和常用命令大全

    composer 常用命令 1.composer初始化 init 如何手动创建 composer.json 文件.实际上还有一个 init 命令可以更容易的做到这一点. 查看当前版本composer ...

  6. Ubuntu安装后续工作

    更新源: sudo gedit /etc/apt/sources.list 清华的源 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial ma ...

  7. Java日志框架的依赖设置备查(SLF4J, Log4j, Logback)

    前言 最近在看代码的过程中,发现身边的许多人在使用Java日志框架时,对于应该引入何种依赖不甚了解,搜索网络上的文章,常常也是互不一致.这篇文章可以看着是Java日志框架的入门使用和实践建议,重点介绍 ...

  8. 【译】通过 GitHub Copilot Chat 简化代码优化和调试(AI 辅助编程)

    今年3月,我们宣布了 Visual Studio 2022 的 GitHub Copilot Chat.通过 Chat, Copilot 已经超越了代码补全,提供了对代码工作原理的深入分析和解释.它支 ...

  9. 开源 SD-Small 和 SD-Tiny 知识蒸馏代码与权重

    最近,人工智能社区在开发更大.更高性能的语言模型方面取得了显著的进展,例如 Falcon 40B.LLaMa-2 70B.Falcon 40B.MPT 30B; 以及在图像领域的模型,如 SD2.1 ...

  10. QA|Pycharm中的git分支提交冲突问题和解决|GIT

    前天,Pycharm中的git分支提交冲突了,原因是我PC上改了文件没有提交,笔记本又本地改代码,笔记本提交时就出现报错:提交拒绝,但pull也被拒绝,网上试了rebase等方法,均没得到解决,最终自 ...