编程读取chap挑战值并生产应答包

编程读取chap挑战值并生产应答包

实验要求

1、熟悉Chap协议流程,编程生成Chap应答
2、根据PPTP数据包,生产Chap应答,比较验证。

实验步骤

一、读取pcap数据包

1、先了解pcap数据包的格式及结构
Pcap数据包的前24字节是文件的包头,其中包含了数据包个数,数据包总长度,时间戳等信息,这24字节信息对我们没有太大用处,因此我们将其略过不读。使用fseek函数直接跳过该文件头即可。

接下来是每个数据包的pcap头,其中有该数据包的长度,时间戳等信息,一共8个字节,其中数据包的长度对我们用处最大,因此我们需要将其读取并存储起来。下为pcap包头结构体

typedef struct pcap_pktheader
{
   
   
    int tv_sec;
    int tv_usec;
    u_int8_t caplen[4];
    u_int8_t len[4];
}pcap_pktheader;

2、读取数据包内容
然后接下来就是数据包的内容,包含数据帧头,IP帧头,GRE协议帧头,PPP协议,以及PPP传输内容,由于我们要生成response响应数据包,因此这些数据内容我们均要读取并保存,因此我们使用如下结构体:
数据帧头结构体:

typedef struct FrameHeader_t
{
   
   
	u_int8_t DstMac[6];
	u_int8_t SrcMac[6];
	u_int16_t FrameType;
}FrameHeader_t;

IP数据报头结构体:

typedef struct IPHeader_t
{
   
   
	u_int8_t Ver_HLen;
	u_int8_t Tos;
	u_int8_t TotalLen[2];
	u_int16_t ID;
	u_int16_t flags_and_offset;
	u_int8_t TTL;
	u_int8_t Protocol;
	u_int16_t Checksum;
	u_int8_t SrcIP[4];
	u_int8_t DstIP[4];
}IPHeader_t;

GRE协议头结构体:

typedef struct GRE_header
{
   
   
	u_int16_t Flags_and_ver;
	u_int16_t Pro_type;
	u_int8_t Payload_len[2];
	u_int16_t Call_ID;
	u_int32_t Seq_num;
	u_int32_t Ack_num;
}GRE_header;

PPP协议结构体:

typedef struct PPP_pro
{
   
   
	u_int16_t Pro;
}PPP_pro;

PPP数据包头结构体:

typedef struct PPP_header
{
   
   
	u_int8_t code;
	u_int8_t identifier;
	u_int8_t len[2];
}PPP_header;

3、读取PPP数据包内容
根据PPP数据包的格式我们知道,包头后第一个字节为value_size,它代表着挑战值的长度,接着是value_size个字节的挑战值,然后是name,因此我们使用如下代码将挑战值读取出来:
读取value_size

u_int8_t value_size;
fread(&value_size,sizeof(u_int8_t),1,fp);

读取挑战值value

u_int8_t * value;
value=(u_int8_t*)malloc(sizeof(u_int8_t)*value_size);
fread(value,value_size,1,fp);

接着是name,name的长度为包头中的包长度-value_size-包头长度-1(value_size)

u_int8_t * name;
u_int16_t namelen;
namelen=PPPheader->len[0]*256+PPPheader->len[1]-value_size-sizeof(PPP_header)-1;
name=(u_int8_t*)malloc(sizeof(u_int8_t)*namelen);
fread(name,namelen,1,fp);
fclose(fp);

二、对得到的挑战值进行加密

1、首先输入该PPP传输时的用户名及密码
该数据包为(user_name: qq , user_passwd: qq)
要输入抓包时客户端登陆的用户名及密码

char user_name[15]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值