⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendpacket.c

📁 开发了一款模拟802.1x协议的网络编程.是在vc6.0下运行的.
💻 C
字号:
/*参考了mystar的华为认证的实际认证格式所写.*/#include "sendpacket.h"#include "global.h"#include "md5.h"extern char          *m_name;extern char          *m_password;extern u_char         m_localIP[4];extern u_char         m_localMAC[6];extern u_char         m_destMAC[6];extern int            m_uploadIP;//Set Dest MAC, Source MAC, Protocol Type and Versionvoid InitBuf(u_char *buf){		u_char prototype[3] = {0x88, 0x8e, 0x01};	memcpy(buf   , m_destMAC,  6);  //set server MAC	memcpy(buf+6 , m_localMAC, 6);  //set source MAC	memcpy(buf+12, prototype,  3);  //set protocol type and its version}//Send EAPOL-START packet to serverint SendLoginPacket(libnet_t *l){	u_char buf[100] = {	0 };	PLOGINFRM pbuf = (PLOGINFRM) buf;	InitBuf(buf);	pbuf->PktType = 0x01;	//EAPOL-START 	fputs(">> Searching for server...\n",stdout);

	return (libnet_write_link(l,buf, 60)==60)?0:-1;
}

//Send username packet to server
int SendNamePacket(libnet_t *l, const u_char *pkt_data){
	
	u_char buf[100] = { 0 };
	PUSERNAMEFRM pbuf = (PUSERNAMEFRM) buf;
	PPKTHDR pkt_buf = (PPKTHDR)pkt_data;
	int nameLen = strlen(m_name);

	InitBuf(buf);
	pbuf->Hdr.Len1 = htons(nameLen + 0x0b);
	pbuf->Hdr.Code = 0x02;
	pbuf->Hdr.Id = pkt_buf->Id;
	pbuf->Hdr.Len2 = pbuf->Hdr.Len1;
	pbuf->Hdr.EapType = 0x01;
	pbuf->Unknown[0] = 0x15;
	pbuf->Unknown[1] = 0x04;

	if(m_uploadIP == 1)
		memcpy(pbuf->Ip, m_localIP, 4);//上传本机IP

	memcpy(&pbuf->Username, m_name, nameLen);    fputs(">> Sending user name...\n",stdout);    return (libnet_write_link(l,buf, 60)==60)?0:-1;}
//Send password packet to server
int SendPasswordPacket(libnet_t *l,const u_char *pkt_data){
		
	u_char  buf[100] = { 0 };

	u_char  md5Data[256] = { 0 }; //md5 buffer
    u_char *md5Dig = NULL;        //result of md5 sum
    int     md5Len = 0;

	int nameLen,passwordLen;

    nameLen = strlen(m_name);
    passwordLen = strlen(m_password);

	PPASSWORDFRM pbuf = (PPASSWORDFRM) buf;
	PPKTHDR pkt_buf = (PPKTHDR)pkt_data;
	const u_char *Chap = ((PPASSWORDFRM) pkt_data)->Md5Pwd;

	InitBuf(buf);
	pbuf->Hdr.Len1 = htons(nameLen + 0x16);
	pbuf->Hdr.Code = 0x02;
	pbuf->Hdr.Id = pkt_buf->Id;
	pbuf->Hdr.Len2 = pbuf->Hdr.Len1;
	pbuf->Hdr.EapType = 0x04;
	pbuf->Unknown[0] = 0x10;

	md5Data[md5Len++] = pkt_buf->Id;//ID

    memcpy(md5Data+md5Len,m_password,passwordLen); 
	md5Len += passwordLen; //密码
	
    memcpy(md5Data+md5Len,Chap,16); 
	md5Len += 16; //密匙

    md5Dig = ComputeHash(md5Data, md5Len);//计算MD5
	

	memcpy(pbuf->Md5Pwd,md5Dig,16);
	memcpy(pbuf->Username, m_name, nameLen);

    fputs(">> Sending password... \n",stdout);
	    return (libnet_write_link(l,buf, 60)==60)?0:-1;
	}
//Send keep-on-line packet to server
int SendKeeponlinePacket(libnet_t *l,const u_char *pkt_data){
   u_char buf[100] = { 0 };
	PKEEPONLINEFRM pbuf = (PKEEPONLINEFRM) buf;
	PPKTHDR pkt_buf = (PPKTHDR)pkt_data;
	int nameLen = strlen(m_name);

	InitBuf(buf);
	pbuf->Hdr.Len1 = htons(nameLen + 0x0b);
	pbuf->Hdr.Code = 0x02;
	pbuf->Hdr.Id = pkt_buf->Id;
	pbuf->Hdr.Len2 = pbuf->Hdr.Len1;
	pbuf->Hdr.EapType = 0x14;
	pbuf->Unknown[0] = 0x00;
	pbuf->Unknown[1] = 0x15;
	pbuf->Unknown[2] = 0x04;

	if(m_uploadIP == 1)
		memcpy(pbuf->Ip, m_localIP, 4);//上传本机IP

	memcpy(pbuf->Username, m_name, nameLen);	fputs(">> Keeping on line... \n",stdout);
	
   return (libnet_write_link(l,buf, 60)==60)?0:-1;
}
//Send EAPOL-LOGOUT packet to server
int  SendLogoutPacket(libnet_t *l){
 	u_char buf[100] = {	0 };
	PLOGOUTFRM pbuf = (PLOGOUTFRM) buf;

	InitBuf(buf);
	pbuf->PktType = 0x02;//EAPOL-LOGOUT

    fputs(">> Logouting... \n",stdout);
    return (libnet_write_link(l,buf,60)==60)?0:-1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -