首页 > 编程语言 >wireshark 捕获 C# 上传的图片

wireshark 捕获 C# 上传的图片

时间:2023-12-26 22:24:15浏览次数:43  
标签:file C# 捕获 env wireshark 上传 图片

如何通过 wireshark 捕获 C# 上传的图片

 

一:背景

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

标签:file,C#,捕获,env,wireshark,上传,图片
From: https://www.cnblogs.com/Leo_wl/p/17929506.html

相关文章

  • Mininet|Protobuf|Bmv2|PI|P4c|Ptf搭建记录
    写在前面看个乐子软件:VMware17pro+Ubuntu20.04目前运行tutorials中basic例程没问题,但不保证完全正确安装网上p4的资料不算很多,github官方社区提供了搭建脚本tutorials/vm-ubuntu-20.04/user-dev-bootstrap.shatmaster·p4lang/tutorials(github.com),搭建过程一开始也参......
  • ASP.NET Core 8 的内存占用可以更低吗?
    MaoniStephens是.NET垃圾回收器(GC)的首席架构师之一,她在2023年8月份发表了一篇关于.NETGC新功能的博客文章,该功能称为DynamicAdaptionToApplicationSizes(DATAS),该功能将随.NET8一起提供。此功能将在应用运行时自动增加或减少服务器GC模式下的托管堆数量。它减少......
  • Flutter获取大文件MD5值的方法以及大文件实现分块上传和断点续传
    Flutter获取大文件MD5值的方法最近一直在搞flutter,有一个需求是将一个不到1G的大文件从App端上传到服务器,为了做文件校验所以要获取到文件的MD5。1.第一步首先获取到文件,并计算出文件大小和分快的数目Filefile=File(path);intfileSize=file.lengthSync();inttotalPart=......
  • CF1887D Split 题解
    Problem-D-CodeforcesSplit-洛谷我现在水平好烂,再做下去自信心就全败没了先考虑\(Q=1\)怎么做?两种做法:暴力枚举分界点,左右判断暴力枚举\(\max\limits_{i=l}^{x}a_i\),找到最靠右边的分界点位置\(x\),判断是否\(\max\limits_{i=l}^{x}a_i<\min\limits......
  • cpp取系统时钟
    //test.cpp:定义控制台应用程序的入口点。//#pragmawarning(disable:4996)#include"stdafx.h"#include"time.h"#include"windows.h"#include<iostream>usingnamespacestd;void取系统时间(){ time_ttimer;//time_t实际是int64 str......
  • 创建一个双模式跨运行时的 JavaScript 包
    本文将指导你发布双模式、跨运行时的JavaScript包。了解如何创建与ESM和CommonJS以及Node.js、Deno和浏览器等不同运行时兼容的库。随着JavaScript开发的不断发展,人们越来越需要能在多种环境中运行的强大依赖包。在本文中,我们将探讨如何发布跨运行时、双模式的JavaScr......
  • pycharm文件中配置.gitignore后没有起作用,未生效
    原因:这是因为pycharm会自动运行gitadd.的功能,所以.gitignore修改后,需要手动清空cached的内容,然后再add一次,这时gitignore会起作用。解决办法:在pycharm命令里输入:gitrm-r--cached.#也可以指定文件清理缓存gitadd.慎用(以下可以不用操作):gitcommit-m"更新过滤规......
  • [ABC267F] Exactly K Steps 题解
    [ABC267F]ExactlyKSteps题解思路首先发现,如果对于查询\((u,k),k>0\)可行,那么对于\((u,k-1)\)也一定可行,因为往回走一步就可以了,所以对于一个点可以找到离它最远的点,根据直径的结论,这个点一定是直径的端点之一。为了方便做,以直径的端点之一为根,然后写一个K级祖......
  • CentOS7下快速升级至OpenSSH9.3p2安全版本
    之前的文章可供参考:CentOS7下快速升级OpenSSH至8.9p1安全版本一、CentOS7服务器上编译生成OpenSSH9.3p2的RPM包1、编译打包的shell脚本来源于该项目https://github.com/boypt/openssh-rpms复制(图片点击放大查看)unzipopenssh-rpms-main.zip-d/optcd/opt/cdop......
  • 探索星辰大海:成为AIGC大模型领域的精英 - 近屿智能OJAC深度训练营招募中!
    朋友,面对AIGC这股新的AIGC技术革命浪潮,您还在旁观吗? 近屿智能OJAC第六期AIGC星辰大海:大模型工程师和产品专家线上训练营,正在寻找像您这样有梦想、有热情的学员!OJAC的AIGC星辰大海第六期训练营,一个为您量身打造的AI大模型学习之旅,已经开启!成百上千的学员已经通过我们的课程实现了职......