c/c++写的Mini Sniffer
前两天写了一个mini sniffer 原理很简单,就是利用原始套接字将网卡设置成混杂模式,然后利用套接字监听经过本主机的所有网络IP封包,但是由于本人现在能力有限,还不能很好的对数据包进行解码分析,就只能将它们的十六进制ASCL码输出..以下是源代码.编译器是vs2005
//
头文件 DataStruct.h
#ifndef _DATASTRUCT_H_
#define
_DATASTRUCT_H_
char
szText[
1024
];
typedef
struct
_IP_HDR

...
{
UCHAR ipVersion;//IP版本号和头长度
UCHAR ipTos;//服务类型
USHORT ipLength;//总长度
USHORT ipID;//封包标识,用于将分片重新组装成封包
USHORT ipFlag;//标志,目前只有前两位有意义,|DF|MF|...DF是不能分片,MF是有更多的分片
UCHAR ipTTL;//封包生存时间,也就是经过的路由个数
UCHAR ipProtocol;//指定数据包携带的数据是使用的是那种协议:TCP,UDP,ICMP??
USHORT ipCheckSum;//首部校验和
ULONG ipSourceAdd;//数据报源地址
ULONG ipDestination;//数据报目的地址
}
IPHEADER,
*
PIPHEADER;
typedef
struct
_UDP_HDR

...
{
USHORT sourcePort;//源端口号
USHORT destinationPort;//目的端口号
USHORT len;//封包长度
USHORT chekSum;//校验和
}
UDPHEADER,
*
PUDPHEADER;

/**/
/*该程序没有ICMP数据包的解析
typedef struct _ICMP_HDR
{
USHORT icmp_type;
USHORT icmp_code;
USHORT icmp_chekSum;
USHORT icmp_id;
USHORT icmp_sequuence;
ULONG icmp_timestamp;
}ICMP_HDR, *PICMP_HDR;
*/
typedef
struct
_TCP_HDR

...
{
USHORT sourcePort;//16位源端口号
USHORT destPort;//目的端口号
ULONG sequenceNumber;// 序列号
ULONG ACK;//确认号
UCHAR dataOffset;//4位首部长度/6位保留字
UCHAR flags;//6位标志位
USHORT windowLen;//窗口大小
USHORT checkSum;//校验和