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

📄 sendpacket.c

📁 用socket写的802.1x程序代码
💻 C
字号:
#include "sendpacket.h"
#include "globle.h"
#include "md5.h"
#include "blog.h"


int SendFindServerPacket(struct interface_data *thisint)
{
    int retval;
    static uint8_t broadPackage[0x3E8]={
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x01,
	0x00,0x00,0xFF,0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x38,0x30,0x32,
	0x31,0x78,0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x1F,0x00,
	0x00,0x00,0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x11,0x17,0x22,
	0x92,0x68,0x64,0x66,0x92,0x94,0x62,0x66,0x91,0x93,0x95,0x62,0x93,0x93,0x91,0x94,
	0x64,0x61,0x64,0x64,0x65,0x66,0x68,0x94,0x98,0xA7,0x61,0x67,0x65,0x67,0x9C,0x6B};
    uint8_t StandardAddr[] = {0x01,0x80,0xC2,0x00,0x00,0x03};
    
    memcpy(broadPackage,StandardAddr,6);
    memcpy(broadPackage+6,thisint->source_mac,6);
    
    printf("searching for server...");
    retval = sendto(thisint->sockInt,broadPackage,0x3E8,0,
              (struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
    if(retval<=0)
    {
    	printf("couldn't send find-server-frame");
    }
    return retval;
}



int SendNamePacket(struct interface_data *thisint,const u_char *pkt_data)
{
	static uint8_t ackPackage[0x3E8]={
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x00,
	  0x00,0x0D,0x02,0x01,0x00,0x0D,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
	  0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,0x2E,
	  0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
	  
	  int namelen;
	  int retval;
	  
	  namelen=strlen(thisint->username);
	  
	  memcpy(ackPackage,thisint->dest_mac,6);
	  memcpy(ackPackage+6,thisint->source_mac,6);
	  
	  ackPackage[0x12]=0x02;
	  ackPackage[0x13]=pkt_data[0x13];
	  ackPackage[22]=pkt_data[22];
	  
	  *(short *)(ackPackage+0x10)=ntohs((short)(5+namelen));
	  *(short *)(ackPackage+0x14)=*(short *)(ackPackage+0x10);
	  memcpy(ackPackage+0x17,thisint->username,namelen);
	  
	  printf("sending user name...");
	  retval=sendto(thisint->sockInt,ackPackage,0x3E8,0,
	          (struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
	  if(retval<=0)
          {
    	      printf("couldn't send username-frame");
          }
          return retval;
}
	  
    



int SendPasswordPacket(struct interface_data *thisint,const u_char *pkt_data)
{
	static uint8_t ackPackage[0x3E8]={
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x00,
	  0x00,0x0D,0x02,0x01,0x00,0x0D,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
	  0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,0x2E,
	  0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
	
	unsigned char  *md5dig;
	int retval;
	int md5len=0;
	unsigned char  md5data[256];
	int namelen,passwordlen;
	
	namelen = strlen(thisint->username);
	passwordlen = strlen(thisint->password);
	
	memcpy(ackPackage,thisint->dest_mac,6);
	memcpy(ackPackage+6,thisint->source_mac,6);
	
	ackPackage[0x12]=0x02;   //code,2代表应答
	ackPackage[0x13]=pkt_data[0x13];   //id
	*(ackPackage+0x16)=*(pkt_data+0x16);  //type,即应答方式,HERE should alway be 4
	
	*(short *)(ackPackage+0x10)=htons((short)(22+namelen)); //len
	*(short *)(ackPackage+0x14)=*(short*)(ackPackage+0x10);
	
	md5data[md5len++]=ackPackage[0x13]; //ID
	memcpy(md5data+md5len,thisint->password,passwordlen);
	md5len+=passwordlen;//密码
	memcpy(md5data+md5len,pkt_data+0x18,pkt_data[0x17]);
	md5len+=pkt_data[0x17];//密钥
	md5dig=ComputeHash(md5data,md5len);
	
	ackPackage[0x17]=16;     //length of md5sum is always 16.
	memcpy(ackPackage+0x18,md5dig,16);
	memcpy(ackPackage+0x28,thisint->username,namelen);
	
	printf("sending password...");
	retval=sendto(thisint->sockInt,ackPackage,0x3E8,0,
	          (struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
	  if(retval<=0)
          {
    	      printf("couldn't send password-frame");
          }
          return retval;
}



 
int SendEchoPacket(struct interface_data *thisint,const u_char *pkt_data)
{
	static uint8_t echoPackage[]={
	   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0xBF,
	   0x00,0x1E,0xFF,0xFF,0x37,0x77,0x7F,0x9F,0xF7,0xFF,0x00,0x00,0xFF,0xFF,0x37,0x77,
	   0x7F,0x9F,0xF7,0xFF,0x00,0x00,0xFF,0xFF,0x37,0x77,0x7F,0x3F,0xFF};
	ULONG_BYTEARRAY uCrypt1,uCrypt2,uCrypt1_After,uCrypt2_After;
	extern ULONG_BYTEARRAY m_serialNo; 
	extern ULONG_BYTEARRAY m_key;
	int retval;
	
	m_serialNo.ulValue++;
	 //m_serialNo is initialized at the beginning of main() of mystar.c, and
         //m_key is initialized in mystar.c when the 1st Authentication-Success packet is received.
         
         uCrypt1.ulValue=m_key.ulValue+m_serialNo.ulValue;
         uCrypt2.ulValue=m_serialNo.ulValue;
         
         memcpy(echoPackage,thisint->dest_mac,6);
         memcpy(echoPackage+6,thisint->source_mac,6);
         
         uCrypt1_After.ulValue = htonl( uCrypt1.ulValue );
         uCrypt2_After.ulValue = htonl( uCrypt2.ulValue );
         
         echoPackage[0x18] = Alog(uCrypt1_After.btValue[0]);
         echoPackage[0x19] = Alog(uCrypt1_After.btValue[1]);
         echoPackage[0x1a] = Alog(uCrypt1_After.btValue[2]);
         echoPackage[0x1b] = Alog(uCrypt1_After.btValue[3]);
         echoPackage[0x22] = Alog(uCrypt2_After.btValue[0]);
         echoPackage[0x23] = Alog(uCrypt2_After.btValue[1]);
         echoPackage[0x24] = Alog(uCrypt2_After.btValue[2]);
         echoPackage[0x25] = Alog(uCrypt2_After.btValue[3]);
         
         retval=sendto(thisint->sockInt,echoPackage,0x2d,0,
	          (struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
	  if(retval<=0)
          {
    	      printf("couldn't send echo-frame");
          }
          return retval;
}




int SendEndCertPacket(struct interface_data *thisint)
{
	static uint8_t exitPacket[]={
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x02,
	  0x00,0x00,0xFF,0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x38,0x30,0x32,
	  0x31,0x78,0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x1F,0x00,
	  0x00,0x01,0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x11,0x17,0x22,
	  0x64,0x91,0x60,0x60,0x65,0x65,0x69,0x61,0x64,0x64,0x94,0x93,0x91,0x92,0x96,0x65,
	  0x95,0x64,0x68,0x91,0x62,0x68,0x62,0x94,0x9A,0xD6,0x94,0x68,0x66,0x69,0x6C,0x65};
	  int retval;
	  memcpy(exitPacket,thisint->dest_mac,6);
	  memcpy(exitPacket+6,thisint->source_mac,6);
	  
	  printf("logoff sending...");
	  
	  retval=sendto(thisint->sockInt,exitPacket,0x80,0,
	          (struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
	  if(retval<=0)
          {
    	      printf("couldn't send logoff-frame");
          }
          return retval; 

}

⌨️ 快捷键说明

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