📄 mystar.c
字号:
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 + -