- 類型:遠(yuǎn)程監(jiān)控大。22M語(yǔ)言:中文 評(píng)分:7.5
- 標(biāo)簽:
使用網(wǎng)絡(luò)嗅探器,可以把網(wǎng)卡置于混雜模式,實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包進(jìn)行截獲和分析。很多防火墻也是通過(guò)截取數(shù)據(jù)包并進(jìn)行分析來(lái)確定是否讓數(shù)據(jù)包繼續(xù)傳輸下去。本文使用Socket實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)嗅探器,對(duì)TCP/IP數(shù)據(jù)包進(jìn)行截取,顯示。
一、IP協(xié)議格式如下:
根據(jù)IP協(xié)議格式可以定義IP頭的數(shù)據(jù)類型:
//IP協(xié)議結(jié)構(gòu)
typedef struct _IP_HEADER{
BYTE bVerAndHLen; /*版本信息(前4位)和頭長(zhǎng)度(后4位)*/
BYTE bTypeOfService; //服務(wù)類型
USHORT nTotalLength; //數(shù)據(jù)包長(zhǎng)度
USHORT nID; //數(shù)據(jù)包標(biāo)識(shí)
USHORT nReserved; //保留字段
BYTE bTTL; //生成時(shí)間
BYTE bProtocol; //協(xié)議類型
USHORT nCheckSum; //校驗(yàn)和
UINT nSourIp; //源IP
UINT nDestIp; //目的IP
}IP_HEADER,*PIP_HEADER;
二、TCP和UDP協(xié)議格式
因此TCP和UDP數(shù)據(jù)結(jié)構(gòu)如下:
//定義TCP協(xié)議結(jié)構(gòu)
typedef struct _TCP_HEADER{
USHORT nSourPort;
USHORT nDestPort;
UINT nSequNum;
UINT nAcknowledgeNum;
USHORT nHLenAndFlag;
USHORT nWindowSize;
USHORT nCheckSum;
USHORT nrgentPointer;
}TCP_HEADER,*PTCP_HEADER;
//定義UDP協(xié)議結(jié)構(gòu)
typedef struct _UDP_HEADER{
USHORT nSourPort;
USHORT nDestPort;
USHORT nLength;
USHORT nCheckSum;
}UDP_HEADER,*PUDP_HEADER;
設(shè)置網(wǎng)卡混雜模式
通常,網(wǎng)卡只接受和自己地址相關(guān)的信息包,即發(fā)送到本地的信息包,當(dāng)設(shè)置網(wǎng)卡為混雜模式時(shí),會(huì)接受所有的IP包!』谶@樣的模式,可以分析各種信息包并描述出網(wǎng)絡(luò)的結(jié)構(gòu)和使用的機(jī)器,由于它接收任何一個(gè)在同一網(wǎng)段上傳輸?shù)臄?shù)據(jù)包,所以也就存在著捕獲密碼、各種信息、秘密文檔等一些沒(méi)有加密的信息的可能性(僅供學(xué)習(xí)研究)。
//#define SIO_RCVALL _WsaiOW(IOC_VENDOR,1)
// 設(shè)置為混雜模式,收所有IP包
DWORD dwValue = 1 ;
if ( ioctlsocket ( MonSock, SIO_RCVALL, &dwValue ) != 0 )
return 0 ;
調(diào)用Socket 的recv函數(shù),接收所有的IP包,根據(jù)IP報(bào)頭提供的信息,可以獲取整個(gè)包的詳細(xì)信息。
VC++下實(shí)現(xiàn)代碼下載