关于wireshark抓包分析(以QQ为例)
在抓包前需要熟悉以下知识点:
现在使用的都是TCP/IP所以我们熟悉四层模型的封装即可(为方便下面还是七层模型)
一、MAC帧头定义
/*数据帧定义,头14个字节,尾4个字节*/
typedef struct _MAC_FRAME_HEADER
{
char m_cDstMacAddress[6]; //目的mac地址
char m_cSrcMacAddress[6]; //源mac地址
short m_cType; //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为arp
}__attribute__((packed))MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;
typedef struct _MAC_FRAME_TAIL
{
unsigned int m_sCheckSum; //数据帧尾校验和
}__attribute__((packed))MAC_FRAME_TAIL, *PMAC_FRAME_TAIL;
00464b718a5e就是目的MAC 6个字节
74d02b164fd9就是本机MAC 6个字节
8864是EtherType 是以太帧里的一个字段,用来指明应用于帧数据字段的协议。根据 IEEE802.3,Length/EtherType 字段是两个八字节的字段,含义两者取一,这取决于其数值。 2个字节
在CDM中输入ipconfig /all 命令就可以看见自己的MAC
11 00 3f dd 00 4d这6个字节(1字节等于8位)先不要管
二、IP头结构的定义
/*IP头定义,共20个字节*/
typedef struct _IP_HEADER
{
char m_cVersionAndHeaderLen; //版本信息(前4位),头长度(后4位)
char m_cTypeOfService; // 服务类型8位
short m_sTotalLenOfPacket; //数据包长度
short m_sPacketID; //数据包标识
short m_sSliceinfo; //分片使用
char m_cTTL; //存活时间
char m_cTypeOfProtocol; //协议类型
short m_sCheckSum; //校验和
unsigned int m_uiSourIp; //源ip
unsigned int m_uiDestIp; //目的ip
} __attribute__((packed))IP_HEADER, *PIP_HEADER ;
0021是ppp协议的协议域字段
16进制的一位数是4位(2^4=16)
45这8位分别表示版本和首部长度
00表示8位服务类型(TOS)【http://www.mamicode.com/info-detail-542445.html】
004b表示总长度
00 00 40 00 38 11 73 7a (共64位)
38为生存时间换成10进制是56
11是8位协议(化成10进制是17即UDP)【http://www.cnblogs.com/xmphoenix/archive/2011/09/15/2177407.html】
最后的b7 3c 13 94代表源ip地址,1b 11 e9 46代表目的ip地址
三、TCP头部定义
typedef struct _TCP_HEADER
{
short m_sSourPort; // 源端口号16bit
short m_sDestPort; // 目的端口号16bit
unsigned int m_uiSequNum; // 序列号32bit
unsigned int m_uiAcknowledgeNum; // 确认号32bit
short m_sHeaderLenAndFlag; // 前4位:TCP头长度;中6位:保留;后6位:标志位
short m_sWindowSize; // 窗口大小16bit
short m_sCheckSum; // 检验和16bit
short m_surgentPointer; // 紧急数据偏移量16bit
}__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
UDP头部定义
typedef struct _TCP_OPTIONS
{
char m_ckind;
char m_cLength;
char m_cContext[32];
}__attribute__((packed))TCP_OPTIONS, *PTCP_OPTIONS;
我们接着看抓到的数据包,我们经过前面的分析得出使用的是UDP
1f40就是源端口,0fac就是目的端口
0034是数据长度,17c8是检查和
后面的就是应用层了......
总结一下
抓到的包就是MAC头,IP头,TCP/UDP头,应用层
本文摘自【http://www.cnblogs.com/li-hao/archive/2011/12/07/2279912.html】
并加以自己实践