含义:
Win2K指的是Windows 2000(微软视窗操作系统2000,简称Win2K),是微软公司Windows NT系列32位视窗操作系统。起初称为Windows NT 5.0。英文版于1999年12月19日上市,中文版于次年二月上市。
Windows 2000是一个preemptive、可中断、图形化及面向商业环境的操作系统,为单一处理器或对称多处理器的32位Intel x86电脑而设计。
源代码:
#include
#include
#include
#include"mstcpip.h"
#pragmacomment(lib,"WS2_32.lib")
#defineSTATUS_FAILED0xFFFF//定义异常出错代码
#defineMAX_PACK_LEN65535//接收的最大IP报文
#defineMAX_ADDR_LEN16//点分十进制地址的最大长度
#defineMAX_PROTO_TEXT_LEN16//子协议名称(如"TCP")最大长度
#defineMAX_PROTO_NUM12//子协议数量
#defineMAX_HOSTNAME_LAN255//最大主机名长度
#defineCMD_PARAM_HELPtrue
typedefstruct_iphdr
{
unsignedcharh_lenver;//4位首部长度+4位IP版本号
unsignedchartos;//8位服务类型TOS
unsignedshorttotal_len;//16位总长度(字节)
unsignedshortident;//16位标识
unsignedshortfrag_and_flags;//3位标志位
unsignedcharttl;//8位生存时间TTL
unsignedcharproto;//8位协议(TCP,UDP或其他)
unsignedshortchecksum;//16位IP首部校验和
unsignedintsourceIP;//32位源IP地址
unsignedintdestIP;//32位目的IP地址
}IP_HEADER;
typedefstruct_tcphdr//定义TCP首部
{
USHORTth_sport;//16位源端口
USHORTth_dport;//16位目的端口
unsignedintth_seq;
unsignedintth_ack;
unsignedcharth_lenres;//4位首部长度/6位保留字
unsignedcharth_flag;//6位标志位
USHORTth_win;//16位窗口大小
USHORTth_sum;//16位校验和
USHORTth_urp;//16位紧急数据偏移量
}TCP_HEADER;
typedefstruct_udphdr//定义UDP首部
{
unsignedshortuh_sport;
unsignedshortuh_dport;
unsignedshortuh_len;
unsignedshortuh_sum;
}UDP_HEADER;
typedefstruct_icmphdr//定义ICMP首部
{
BYTEi_type;//8位类型
BYTEi_code;//8位代码
USHORTi_cksum;//16位校验和
USHORTi_id;//识别号(一般用进程号作为识别号)
USHORTi_seq;//报文序列号
ULONGtimestamp;//时间戳
}ICMP_HEADER;
typedefstruct_protomap//定义子协议映射表
{
intProtoNum;
charProtoText[MAX_PROTO_TEXT_LEN];
}PROTOMAP;
PROTOMAPProtoMap[MAX_PROTO_NUM]={//为子协议映射表赋值
{IPPROTO_IP,"IP"},
{IPPROTO_ICMP,"ICMP"},
{IPPROTO_IGMP,"IGMP"},
{IPPROTO_GGP,"GGP"},
{IPPROTO_TCP,"TCP"},
{IPPROTO_PUP,"PUP"},
{IPPROTO_UDP,"UDP"},
{IPPROTO_IDP,"IDP"},
{IPPROTO_ND,"NP"},
{IPPROTO_RAW,"RAW"},
{IPPROTO_MAX,"MAX"},
{NULL,""}};
SOCKETSockRaw;
charTcpFlag[6]={’F’,’S’,’R’,’P’,’A’,’U’};//定义TCP标志位
boolParamTcp=false;//-t关注TCP报文
boolParamUdp=false;//-u关注UDP报文
boolParamIcmp=false;//-i关注ICMP报文
boolParamDecode=true;//-d对协议进行解码
char*strFromIpFilter=NULL;//源IP地址过滤
char*strDestIpFilter=NULL;//目的地址过滤
intDecodeIpPack(char*,int);
intDecodeTcpPack(char*);
intDecodeUdpPack(char*);
intDecodeIcmpPack(char*);
voidCheckSockError(int,char*);
char*CheckProtocol(int);
voidusage(void);
boolGetCmdLine(int,char**);