📄 sendpacket.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 + -