雖然網上已經有了sharpsniffer
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));
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位址
string s = getbytearrayhexstring(buf, 0, recvedsize); //此函式把位元組陣列格式化,詳細參考源**
printline(s);
詳細過程參考源**
本程式在winxp sp3, vs2010, .net framework 4.0 client & .net framework 2.0下編譯執行通過
能成功抓包,如ping發出和收到的資料報能抓到,開啟網頁的資料報也能抓到。
c 使用sharppcap實現 網路抓包
原文 詳細用法 csharp view plain copy print?using system using system.collections.generic using system.linq using system.text using system.io using system.th...
跳台階 牛客網(C 實現)
一 題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 二 程式設計思路 一開始想著先列出前幾級台階的跳法,看看是否能發現什麼規律。1級台階 跳1級 1種跳法 2級台階 跳1級 跳2級 2種跳法 3級台階 1級 1級 1級 1...
使用C 實現Vector
最近開始學習資料結構與演算法了,使用的是weiss的資料結構與演算法c 描述,第三版和第四版。其中第四版已經全部用c 11的標準重寫了。感覺我自己寫的時候有點糾結到底用c 老的標準還是c 11的標準,哈哈,選擇困難!今天我主要用c 老的標準寫了vector類,因此沒有實現移動建構函式和移動拷貝函式。...