关于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】

并加以自己实践

posted @ 2015-10-07 15:39  坚强的芒果  阅读(3294)  评论(0编辑  收藏  举报