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

📄 mystar.c

📁 linux 802.1x 源码,兼容锐捷客户端 代码简洁小巧
💻 C
📖 第 1 页 / 共 2 页
字号:
					fputs("向服务器汇报本机IP设置\n",fplog);					sendNotifyPacket(l);					break;				case 04:		//用户名或密码错误					printf("服务器返回错误代码\n");					fprintf("服务器返回错误代码\n",fplog);					exit(1);				default:					printf("请求代码未知\n");					continue;						}		}//信号处理 		sigemptyset(&sigset_zero);		sigaddset(&sigset_zero,SIGINT);		sigaddset(&sigset_zero,SIGALRM);		sigprocmask(SIG_UNBLOCK,&sigset_zero,NULL);		if(pkt_data[0x0f] == 0x0c)		//收到服务器维护链接响应		{			//printf("收到服务器维护链接响应\n");			isGetEchoFromServer = 1;			alarm(120);		}    }// end while	  		done:		pcap_close(p); 		libnet_destroy(l);		return 0;	err2:		pcap_close(p);	err1:		libnet_destroy(l);		return 1;}unsigned char* hashMD5(const unsigned char* pkt_data,const char* password,unsigned int passwordlen){	unsigned char inputdata[0x80] = {0};	static unsigned char *ret;	unsigned char hash[0x10];		memcpy(inputdata,pkt_data+0x13,1);	memcpy(inputdata+0x01,password,passwordlen);	//printf("encipher password with id = %2x\n",pkt_data[0x13]);	memcpy(inputdata+0x01+passwordlen,pkt_data+0x18,16);		ret = MDString((char*)inputdata,0x11+passwordlen);	return ret;}static void checkAndSetConfig(void){	FILE  *fp;	char   buf[4096];	char  *p;	int   i,len;		char  ip[32];	char	mac[32];	char  nullmac[6] = "\0";		name = (char*) malloc(32);	password = (char*) malloc(32);	nic = (char*) malloc(32);	memset(name,0,32);	memset(password,0,32);	memset(nic,0,32);	memset(ip,0,32);	memset(mac,0,32);	//the check and anylysis against mystar.conf  *don't*  work perfectly.	//this may be improved in the later version.	if( (fp=fopen("mystar.conf","r"))==NULL ) err_quit("cannot open file mystar.conf ! check it.\n");	while(fgets(buf,sizeof(buf),fp)!=NULL)	{		if( (buf[0]=='#') || (buf[0]=='\n') ) continue;		len=strlen(buf); if(buf[len-1]=='\n') buf[len-1]='\0';     	if( ( (p=strchr(buf,'=')) == NULL) || (p==buf) )  continue;     	//the code above doesn't detect ALL the errors!! it should be improved in future.     	*p++='\0';     	for(i=0; i<strlen(buf); i++) buf[i]=tolower(buf[i]);		if(strcmp(buf,"name")==0)		{  strncpy(name,p,31); name[31]=0;}		else if(strcmp(buf,"password")==0)			{				strncpy(password,p,31); password[31]=0;			}		else if(strcmp(buf,"nic")==0)			{				for(i=0; i<strlen(p); i++) p[i]=tolower(p[i]);     	      strncpy(nic,p,31); nic[31]=0;			}		else if(strcmp(buf,"netmask")==0)			{				strncpy(ip,p,sizeof(ip)-1);				ip[sizeof(ip)-1]=0;				if( inet_pton(AF_INET,ip,netmask)<=0 )					err_msg("invalid netmask found in mystar.conf, ignored...\n");			}		else if(strcmp(buf,"gateway")==0)			{				strncpy(ip,p,sizeof(ip)-1);				ip[sizeof(ip)-1]=0;				if( inet_pton(AF_INET,ip,gateway)<=0 )					err_msg("invalid gateway found in mystar.conf, ignored...\n");			}		else if(strcmp(buf,"dhcpserver")==0)			{				strncpy(ip,p,sizeof(ip)-1);				ip[sizeof(ip)-1]=0;				if( inet_pton(AF_INET,ip,dhcpserver)<=0 )					err_msg("invalid dhcpserver found in mystar.conf, ignored...\n");			}		else if(strcmp(buf,"servermac")==0)			{				int i = 0;				strncpy(mac,p,sizeof(mac)-1);				mac[sizeof(mac)-1]=0;				for(i = 0;i < 6;i++)				{					char c = mac[i*3];					int j = 0;					for(j = 0;j < 2;j++){						switch(c)						{							case 'a':case 'A':								if(j == 0)	serverMAC[i] = 0x0A*0x10;								else	serverMAC[i] += 0x0A;								break;							case 'b':case 'B':								if(j == 0)	serverMAC[i] = 0x0B*0x10;								else	serverMAC[i] += 0x0B;								break;							case 'c':case 'C':								if(j == 0)	serverMAC[i] = 0x0C*0x10;								else	serverMAC[i] += 0x0C;								break;							case 'D':case 'd':								if(j == 0)	serverMAC[i] = 0x0d*0x10;								else	serverMAC[i] += 0x0d;								break;							case 'e':case 'E':								if(j == 0)	serverMAC[i] = 0x0e*0x10;								else	serverMAC[i] += 0x0e;								break;							case 'f':case 'F':								if(j == 0)	serverMAC[i] = 0x0F*0x10;								else	serverMAC[i] += 0x0F;								break;							case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':								{								char digit[2] = {0};								unsigned char val = 0;								digit[0] = c;								val = (unsigned char) atoi(digit);								if(j == 0)									serverMAC[i] = val*0x10;								else									serverMAC[i]+= val;								}								break;							case ':' : default:								err_msg("invalid servermac,ignored....\n");															printf("%c\n",c);								break;						}//end switch						if(j == 0)							c = mac[i*3+1];					}//end for	j					}//end for i			}		else continue;	}	if(ferror(fp)) err_quit("cannot read mystar.conf ! check it.\n");	fclose(fp);		if(memcmp(serverMAC,nullmac,6) == 0)		//采用默认的服务器MAC地址		memcpy(serverMAC,"\x01\x80\xc2\x00\x00\x03",6);		//save configure information into mystar.log	if(fplog != NULL){		if(name != NULL)	fputs("name: ******\n",fplog);		if(password != NULL) fputs("password: ******\n",fplog);		if(nic != NULL)	fprintf(fplog,"nic: %s\n",nic);		//netmask		fprintf(fplog,"netmask :%d.%d.%d.%d\n",netmask[0],netmask[1],netmask[2],netmask[3]);		//gateway		fprintf(fplog,"gateway :%d.%d.%d.%d\n",gateway[0],gateway[1],gateway[2],gateway[3]);		//dhcpserver		fprintf(fplog,"dhcpserver :%d.%d.%d.%d\n",dhcpserver[0],dhcpserver[1],dhcpserver[2],dhcpserver[3]);		fprintf(fplog,"servermac :%02x:%02x:%02x:%02x:%02x:%02x\n",serverMAC[0],serverMAC[1],serverMAC[2],serverMAC[3],serverMAC[4],serverMAC[5]);			}   if((name==NULL)||(name[0]==0)) err_quit("invalid name found in mystar.conf!\n");   if((password==NULL)||(password[0]==0)) err_quit("invalid password found in mystar.conf!\n");   if( (nic==NULL) || (strcmp(nic,"")==0) ||  (strcmp(nic,"any")==0) )       err_quit("invalid nic found in mystar.conf!\n");	//just set them to zero since they don't seem to be important.	if(netmask[0] == 0) err_quit("invalid netmask\n");	if(gateway[0] == 0) err_quit("invalid gateway\n");	if(dhcpserver[0] == 0) err_quit("invalid dhcpserver\n");				}static void sig_intr(int signo){   if(m_state==3)      {          sendLogoffPacket(l);          system("dhclient -r");          fputs("发送注销数据包\n释放IP地址\n",fplog);	  		 //system("killall -9 dhclient");          libnet_destroy(l);      }   fclose(fplog);   _exit(0);}static void sig_alrm(int signo){	//printf("时钟周期已到,状态:%1x,%1x\n",m_state,isGetEchoFromServer);	if(m_state == 3 && isGetEchoFromServer){		sendSessionEchoPacket(l);		isGetEchoFromServer = 0;		fputs("发送维护链接数据包\n",fplog);	}	//alarm(120);}//modified by reyuvoid showConfig(void){	printf("name: %s\npassword: %s\nnic: %s\n",name,password,nic);	printf("\n");//	printf("localMAC: %s\nserverMAC: %s\nip: %s\nnetmask: %s\nnetgate: %sdnsl: %s\n",m_localMAC,m_destMAC,m_ip,m_netmask,m_netgate,m_netgate,m_dns1);	printf("localMAC: %02x:%02x:%02x:%02x:%02x:%02x\n",localMAC[0],localMAC[1],localMAC[2],localMAC[3],localMAC[4],localMAC[5]);	printf("serverMAC: %02x:%02x:%02x:%02x:%02x:%02x\n",serverMAC[0],serverMAC[1],serverMAC[2],serverMAC[3],serverMAC[4],serverMAC[5]);	printf("netmask: %d.%d.%d.%d\n",netmask[0],netmask[1],netmask[2],netmask[3]);	printf("gateway: %d.%d.%d.%d\n",gateway[0],gateway[1],gateway[2],gateway[3]);	printf("dhcpserver: %d.%d.%d.%d\n",dhcpserver[0],dhcpserver[1],dhcpserver[2],dhcpserver[3]);}

⌨️ 快捷键说明

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