日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#使用sharppcap实现网络抓包-----2

發布時間:2025/7/25 C# 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#使用sharppcap实现网络抓包-----2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雖然網上已經有了SharpSniffer

這一個SharpSniffer還是原創的
無他,唯為學習
工程文件下載:SharpSniffer.rar

1、創建套接字
2、綁定到本機
3、設置IOControl
4、接收數據
5、處理(顯示)數據

1、創建套接字

創建socket?,據MSDN,IOControlCode.ReceiveAll(后面要使用到)使用時有以下限制:

ReceiveAll

啟用對網絡上的所有 IPv4 數據包的接收。套接字必須有?InterNetwork地址族,套接字類型必須是Raw,

并且協議類型必須為?IP。當前用戶必須屬于本地計算機上的 Administrators 組,并且套接字必須綁定到特定端口。

Windows 2000 及更高版本的操作系統支持此控制代碼。此值等于 Winsock 2 SIO_RCVALL 常數。

?Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); //直接new一個

2、綁定到本機

綁架到本機,只有綁定到本機才可以監聽數據包:

socket.Bind(new IPEndPoint(GetHostAdress(), 0));

3、設置IOControl
獲取本機IP地址,從一個主機名可能解析到好幾個地址,這要看你電腦的網絡適配器的狀態了,這里只取第一個:

private static IPAddress GetHostAdress()

{

? ? ?string hostName=Dns.GetHostName();

? ? ?var hostAddreses=Dns.GetHostAddresses(hostName);

? ? ?return hostAddreses[0];

}

很關鍵的一步,對IOControl進行設置。這里輸入參數為1表示RCVALL_ON(啟用接收所有包),當輸入參數為0時表示RCVALL_OFF,具體定義在MSDN中WSAIoctl函數的Remark中說的很清楚:

byte[] outValue = BitConverter.GetBytes(0);

byte[] inValue = BitConverter.GetBytes(1);

socket.IOControl(IOControlCode.ReceiveAll,inValue, outValue); //對IO設置為可以接受所有包

很關鍵的,接收數據:

int recvedSize = socket.ReceiveFrom(buf, ref ep); //用ReceiveFrom接受數據

// socket.Receive(buf);

//用Receive也能接受到數據,不過使用ReceiveFrom可以直接獲取發送方IP地址

接下來要顯示數據了,這里只是簡單的把數據打印出來,如果想獲取該數據包的更多信息則就需要按IP數據包的格式來解析包的內容了:

string s = GetByteArrayHexString(buf, 0, recvedSize); //此函數把字節數組格式化,詳細參考源代碼

PrintLine(s);

詳細過程參考源代碼
本程序在WinXP sp3, VS2010, .Net Framework 4.0 Client & .Net Framework 2.0下編譯運行通過
能成功抓包,如ping發出和收到的數據包能抓到,打開網頁的數據包也能抓到。

轉載于:https://www.cnblogs.com/1175429393wljblog/p/5622809.html

總結

以上是生活随笔為你收集整理的C#使用sharppcap实现网络抓包-----2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。