资源简介
在一个局域网环境中,用C++ 语言实现下面的基本功能:
1) 确定截包的方法:包括RAW 模式SOCKET、PACKET32以及直接作为驱动程序挂在NDIS上;
2) 要求截获以下包的类型并分析:以太网帧格式、IP包、ICMP包、TCP报文段、UDP报文等相关字段进行描述。
代码片段和文件信息
#define RCVALL_ON 1
#define MAX_ADDR_LEN 16 //点分十进制地址的最大长度
#define MAX_PROTO_TEXT_LEN 16 //子协议名称(如“TCP“)最大长度
#define WINSOCK_VERSION MAKEWORD(2 2)
#pragma comment(lib “Ws2_32.lib“)
#include
#include
#include “mstcpip.h“
#include
typedef struct iphdr //定义IP首部
{
unsigned char h_lenver; //4位首部长度+4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //16位总长度(字节)
unsigned short ident; //16位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IPHeader;
typedef struct _tcphdr //定义TCP首部
{
USHORT th_sport; //16位源端口
USHORT th_dport; //16位目的端口
unsigned int th_seq; //32位序列号
unsigned int th_ack; //32位确认号
unsigned char th_lenres; //一个字节表示8位4位数据偏移/6位保留字/6位特殊字
unsigned char th_flag; //6位标志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校验和
USHORT th_urp; //16位紧急数据偏移量
}TCP_HEADER;
typedef struct _udphdr //定义UDP首部
{
unsigned short uh_sport; //16位源端口
unsigned short uh_dport; //16位目的端口
unsigned short uh_len; //16位长度
unsigned short uh_sum; //16位校验和
}UDP_HEADER;
typedef struct _icmphdr //定义ICMP首部
{
BYTE i_type; //8位类型
BYTE i_code; //8位代码
USHORT i_cksum; //16位校验和
USHORT i_id; //识别号(一般用进程号作为识别号)
USHORT i_seq; //报文序列号
ULONG timestamp; //时间戳
}ICMP_HEADER;
int iTTLiLENiBYTES;
char szSourceIP[MAX_ADDR_LEN] szDestIP[MAX_ADDR_LEN];//装源地址目的地址,长度为16位
int iSourcePortiDestPort;
int fflag=0;//file flag
#define PACKAGE_SIZE sizeof(IPHeader)+1000//数据内容的大小
void HandleError(char *func);
//functions
int DecodeTcpPack(char * intFILE *); //TCP解包函数
int DecodeUdpPack(char * intFILE *); //UDP解包函数
int DecodeIcmpPack(char * intFILE *); //ICMP解包函数
//MAIN
int main(int argc char *argv[])
{
sockaddr_in saSourcesaDest;
WSAData wsaData;
char buf[PACKAGE_SIZE];
WSAStartup(WINSOCK_VERSION &wsaData);//对WinSock DLL进行初始化
SOCKET sock = socket(AF_INET SOCK_RAW IPPROTO_IP);
if(sock == SOCKET_ERROR)
{
HandleError(“socket“);
WSACleanup();//终止DLL使用
return -1;
}
//获取本机IP地址
struct sockaddr_in addr;
memset(&addr 0 sizeof(addr));
//addr.sin_addr.S_un.S_addr = inet_addr(“192.168.1.101“);
char name[256];
PHOSTENT hostinfo;
if( gethostname ( name sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
memcpy(&(addr.sin_addr.S_un.S_addr) (struct in_addr *)*hostinfo->h_addr_list sizeof((struct in_addr *)*hostinfo->h_addr_list ));
}
}
addr.sin_family = AF_INET;
if(bind(sock (struct sockaddr*)&addr sizeof(addr)) == SOCKET_ERROR)//bind
{
HandleError(“bind“);
}
//设置SOCK_RAW为SIO_RCVALL,以便接收所有的IP包
int on = RCVALL_ON;//1
DWORD num;
//控制一个套接口的模式。
////将进行的操作的控制代码
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8406 2009-12-25 15:12 jiebao2\Cpp1.cpp
文件 3443 2009-12-21 14:43 jiebao2\Cpp1.dsp
文件 514 2009-12-15 13:53 jiebao2\Cpp1.dsw
文件 9522176 2009-12-25 15:14 jiebao2\Cpp1.ncb
文件 53760 2009-12-21 14:44 jiebao2\Cpp1.opt
文件 868 2009-12-21 14:43 jiebao2\Cpp1.plg
文件 872 2009-12-25 14:39 jiebao2\Cpp1.sln
..A..H. 16896 2009-12-25 15:14 jiebao2\Cpp1.suo
文件 4863 2009-12-25 14:39 jiebao2\Cpp1.vcproj
文件 1409 2009-12-21 13:52 jiebao2\Cpp1.vcproj.lys-PC.lys.user
文件 11572 2009-12-25 15:12 jiebao2\Debug\BuildLog.htm
文件 3099648 2009-12-25 15:12 jiebao2\Debug\Cpp1.bsc
文件 1427 2009-12-25 15:14 jiebao2\Cpp1.vcproj.WWW-272012DC625.Administrator.user
文件 483328 2009-12-25 15:12 jiebao2\Debug\Cpp1.exe
文件 146 2009-12-22 14:18 jiebao2\Debug\Cpp1.exe.em
文件 212 2009-12-22 14:18 jiebao2\Debug\Cpp1.exe.em
文件 145 2009-12-25 15:12 jiebao2\Debug\Cpp1.exe.intermediate.manifest
文件 1079408 2009-12-25 15:12 jiebao2\Debug\Cpp1.ilk
文件 33578 2009-12-25 15:12 jiebao2\Debug\Cpp1.obj
文件 0 2009-12-25 15:12 jiebao2\Debug\Cpp1.sbr
文件 67 2009-12-25 15:12 jiebao2\Debug\mt.dep
文件 388096 2009-12-25 15:12 jiebao2\Debug\vc80.idb
文件 102400 2009-12-25 15:12 jiebao2\Debug\vc80.pdb
文件 58059 2009-12-25 14:46 jiebao2\log.txt
目录 0 2009-12-25 15:12 jiebao2\Debug
目录 0 2009-12-25 15:12 jiebao2
文件 2001920 2009-12-25 15:12 jiebao2\Debug\Cpp1.pdb
----------- --------- ---------- ----- ----
16873213 27
............此处省略0个文件信息
- 上一篇:MFC编写DDA画直线和圆
- 下一篇:医院管理系统数据库
评论
共有 条评论