資源簡介
winsock 抓包,抓TCP,UDP,并解析報文頭

代碼片段和文件信息
#include?
#include?
#include?
#include?
#define?SIO_RCVALL????????????_WSAIOW(IOC_VENDOR1)
#define?MAX_LOG??20
#pragma?comment(?lib?“ws2_32.lib“?)
using?namespace?std;
//IP首部
typedef?struct?tIPPackHead
{
enum?PROTOCOL_TYPE{
?PROTOCOL_TCP?=?6
??PROTOCOL_UDP?=?17
??PROTOCOL_ICMP?=?1
??PROTOCOL_IGMP?=?2????
};
inline?unsigned?HeadLen()?const
{
?//首部長度單位為4bytes。因此乘4
?return?(ver_hlen?&?0x0F)?<2;
}
inline?unsigned?PackLen()?const
{
?return?wPacketLen;
}
BYTE?ver_hlen;???????//IP協議版本和IP首部長度。高4位為版本,低4位為首部的長度(單位為4bytes)
BYTE?byTOS;????????//服務類型
WORD?wPacketLen;?//IP包總長度。包括首部,單位為byte。[Big?endian]
WORD?wSequence;?????//序號,一般每個IP包的序號遞增。[Big?endian]
WORD?wMarkFragPoi;?
WORD???wID;?//片段ID標識
WORD???wFlags;?//標志
WORD???FragOff;?//片偏移
BYTE?byTTL;??????????//生存時間??
BYTE?byProtocolType;?//協議類型,見PROTOCOL_TYPE定義
WORD?wHeadCheckSum;?????//IP首部校驗和[Big?endian]
DWORD?dwIPSrc;??????????//源地址
DWORD?dwIPDes;??????????//目的地址
}?IP_PK_HEAD;
int?DecodeIP(char?*buf?int?lenFILE?*file)
{
//int?n?=?len;
//if(?n?>=?sizeof(IP_PK_HEAD)?)
//{
?????IP_PK_HEAD?iphead;
?????memcpy(?&iphead?buf?sizeof(iphead)?);
?????//以下三個為Big?Endian字節順序,轉換成主機字節順序
?????iphead.wPacketLen?=?ntohs(?iphead.wPacketLen?);
?????iphead.wSequence?=?ntohs(?iphead.wSequence?);
?????iphead.wHeadCheckSum?=?ntohs(?iphead.wHeadCheckSum?);
?????iphead.wID?=?ntohs(?iphead.wID?);
?????iphead.wFlags?=?ntohs(?iphead.wFlags?);
?iphead.FragOff?=?ntohs(?iphead.FragOff?);
?????in_addr?srcdst;
?????src.S_un.S_addr?=?iphead.dwIPSrc;
?????dst.S_un.S_addr?=?iphead.dwIPDes;
?????char?strsrc[20]strdst[20];
?????strcpy(strsrc?inet_ntoa(src)?);
?????strcpy(?strdst??inet_ntoa(dst));
?????printf(?“IP數據包:?版本=%d首部長度=%d協議類型=%dIP包總長度=%d序號=%d標識=%d標志=%d片偏移=%d生存時間=%dIP首部校驗和=%d源地址=%s目的地址=%s?“
??????iphead.ver_hlen?>>?4
??????(iphead.ver_hlen?&?0x0F)?<2
??????iphead.byProtocolType
??????iphead.wPacketLen
??????iphead.wSequence
??????iphead.wID
??????iphead.wFlags
??????iphead.FragOff
??iphead.byTTL
??iphead.wHeadCheckSum
??????strsrc
??????strdst?);
?printf(“\n\n“);
?fprintf(file“IP數據包:?版本=%d首部長度=%d協議類型=%dIP包總長度=%d序號=%d標識=%d標志=%d片偏移=%d生存時間=%dIP首部校驗和=%d源地址=%s目的地址=%s?\n\n“
??????iphead.ver_hlen?>>?4
??????(iphead.ver_hlen?&?0x0F)?<2
??????iphead.byProtocolType
??????iphead.wPacketLen
??????iphead.wSequence
??????iphead.wID
??????iphead.wFlags
??????iphead.FragOff
??iphead.byTTL
??iphead.wHeadCheckSum
??????strsrc
??????strdst?);
//}
return?0;
}
void?AutoWSACleanup()
{
::WSACleanup();
}
int?main(int?argc?char?*argv[])
{
FILE?*file;
if(argc?!=?2){
file =?fopen(“log.txt““w“);
}
else{
file =?fopen(argv[1]“w“);
}
//初始化winsock庫,使用2.2版本
u_short?wVersionRequested?=?0x0202;
WSADATA?wsaData;
if(?SOCKET_ERROR?==?WSAStartup(?wVersionRequested?&wsaData?)?)
{????????
?????cout
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3684??2008-06-18?03:20??0606303036(李輝)(需修訂版)\log.txt
?????文件????????846??2008-06-18?03:20??0606303036(李輝)(需修訂版)\0606303036(李輝)(需修訂版).plg
?????文件???????5002??2008-06-18?03:08??0606303036(李輝)(需修訂版)\0606303036(李輝)(需修訂版).cpp
?????文件??????41984??2008-06-18?03:23??0606303036(李輝)(需修訂版)\0606303036(李輝)(需修訂版).ncb
?????文件?????205824??2008-06-18?03:20??0606303036(李輝)(需修訂版)\Debug\vc60.idb
?????文件?????151552??2008-06-18?03:20??0606303036(李輝)(需修訂版)\Debug\vc60.pdb
?????文件?????520317??2008-06-18?03:20??0606303036(李輝)(需修訂版)\Debug\0606303036(李輝)(需修訂版).exe
?????文件????1106944??2008-06-18?03:20??0606303036(李輝)(需修訂版)\Debug\0606303036(李輝)(需修訂版).pdb
?????文件????5730096??2008-06-18?03:20??0606303036(李輝)(需修訂版)\Debug\0606303036(李輝)(需修訂版).pch
?????文件?????155562??2008-06-18?03:20??0606303036(李輝)(需修訂版)\Debug\0606303036(李輝)(需修訂版).obj
?????文件?????790028??2008-06-18?03:20??0606303036(李輝)(需修訂版)\Debug\0606303036(李輝)(需修訂版).ilk
?????文件???????3643??2008-06-18?03:20??0606303036(李輝)(需修訂版)\0606303036(李輝)(需修訂版).dsp
?????文件??????48640??2008-06-18?03:23??0606303036(李輝)(需修訂版)\0606303036(李輝)(需修訂版).opt
?????文件????????577??2008-06-18?03:23??0606303036(李輝)(需修訂版)\0606303036(李輝)(需修訂版).dsw
?????目錄??????????0??2008-06-18?03:18??0606303036(李輝)(需修訂版)\Debug
?????目錄??????????0??2008-06-18?03:19??0606303036(李輝)(需修訂版)
-----------?---------??----------?-----??----
??????????????8764699????????????????????16
- 上一篇:開源MPEG2-TS格式分析工具
- 下一篇:電力行業規約645通信的VC++實現源碼
評論
共有 條評論