詳解如何通過wireshark實(shí)現(xiàn)捕獲C#上傳的圖片
一:背景
講故事
這些天計劃好好研究下tcp/ip,以及socket套接字,畢竟工控中設(shè)計到各種交互協(xié)議,如果只是模模糊糊的了解,對分析此類dump還是非常不利的,而研究協(xié)議最好的入手點(diǎn)就是用抓包工具 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 吐出來的代碼做了一點(diǎn)簡單修改。
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 部署在虛擬機(jī)上,修改端口為80,appsettings.json 修改如下:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:80"
}
}
}
}運(yùn)行之后,一切正常,截圖如下:

2. wireshark 捕獲
這里我們將 wireshark 部署在 server (192.168.25.133)端,不過在開啟之前有兩點(diǎn)要注意:
- 尋找到你需要采集流量包的網(wǎng)卡,比如我這里的 Ethernet0
- 設(shè)置一個捕獲過濾器,這樣就不會把你的 wireshark 采集界面給卡死。
參考截圖如下:

啟動捕獲后,在首頁開始上傳一個 1M左右的圖片,在 wireshark 中可以看到這 1M 的圖片被切割成了 791 個 tcp segment 發(fā)送。

接下來在 上圖中的 Http 請求上點(diǎn)擊右鍵,選擇 Follow -> TCP Stream ,會自動打開本次 http 傳輸?shù)娜績?nèi)容,接下來記得做下面三個選擇:
- 選擇正確的數(shù)據(jù)包流向
- 數(shù)據(jù)格式為原始的Raw格式
- Save as 保存到本地
詳情截圖如下:

根據(jù) http 上傳圖片的格式,把內(nèi)容中換行符之前和之后的二進(jìn)制都去掉,而這個換行符的二進(jìn)制表示為 0D0A,接下來打開 winhex,刪掉 0D0A 之前和之后的所有多余字符。截圖如下:
之前

之后

如果大家有點(diǎn)懵,可以觀察一個正確的 PNG 在 WinHex 上的表現(xiàn),選中多余的二進(jìn)制之后做一個 delete 操作,然后重命名為 test.png,截圖如下:

哈哈,一張圖片映入眼簾,打完收工!
到此這篇關(guān)于詳解如何通過wireshark實(shí)現(xiàn)捕獲C#上傳的圖片的文章就介紹到這了,更多相關(guān)wireshark捕獲C#上傳圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C# 網(wǎng)絡(luò)編程系列:實(shí)現(xiàn)類似QQ的即時通信程序
本篇主要介紹了c#實(shí)現(xiàn)類似QQ的即時通信程序 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-12-12
C#實(shí)現(xiàn)注冊碼注冊機(jī)制效果詳解
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)注冊碼注冊機(jī)制效果,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
結(jié)構(gòu)體和聯(lián)合體的區(qū)別及說明
文章主要介紹了C語言中的結(jié)構(gòu)體和聯(lián)合體,結(jié)構(gòu)體是一種自定義的復(fù)合數(shù)據(jù)類型,可以包含多個成員,每個成員可以是不同的數(shù)據(jù)類型,聯(lián)合體是一種特殊的數(shù)據(jù)結(jié)構(gòu),可以在內(nèi)存中共享同一段存儲空間來存儲不同類型的數(shù)據(jù)2025-01-01
C#把數(shù)組中的某個元素取出來放到第一個位置的實(shí)現(xiàn)方法
這篇文章主要介紹了C#把數(shù)組中的某個元素取出來放到第一個位置的實(shí)現(xiàn)方法,涉及C#針對數(shù)組的常見操作技巧,非常具有實(shí)用價值,需要的朋友可以參考下2014-12-12
C#實(shí)現(xiàn)rabbitmq 延遲隊列功能實(shí)例代碼
本篇文章主要介紹了C#實(shí)現(xiàn)rabbitmq 延遲隊列功能實(shí)例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04

