📄 main.c
字号:
#include <stdio.h>#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <math.h>#include <time.h>#include <string.h>#include "md5.h" //md5加密函数void randomize () ;void jiami(unsigned char *text, char *str) ;//常量定义 char S_IP[16] = "60.178.69.2" ; //服务器IP char C_IP[16] = "10.254.118.80"; //客户端IP char USER[16] = "034100548"; //用户名 char PASS[16] = "956540"; //密码 char SIGN[17] = "0123456789abcde7" ;//签名unsigned char digest[16]; //16位随机数及其MD5,定义在外,方便使用。char Random[17] ;int main(){ //初始化网络栈// WSADATA wsaData; // WSAStartup(MAKEWORD(2,2), &wsaData); //cout<<"服务器:"<<S_IP<<endl; //cout<<"电信IP:"<<C_IP<<endl; //cout<<"用户名:"<<USER<<endl; //cout<<"密 码:"<<PASS<<endl; int i ; int s; //套接字句柄 struct sockaddr_in addr; //地址 char genbuf[1024] ; //general buf for sending and recving data unsigned char user[33],pass[33],ip[33],sign[33]; //存放加密过的用户名和密码及ip,sign. char serial_number[17],key[17] ; srand(time(NULL)); randomize(); //生成随机数及MD5; jiami((unsigned char *)USER,( char *)user); //异或加密 jiami((unsigned char *)C_IP,( char *)ip); jiami((unsigned char *)SIGN,( char *)sign); jiami((unsigned char *)PASS,( char *)pass); i = 217 + strlen(C_IP);//计算HTML表单的长度 //构造 HTTP 数据包 sprintf(genbuf,"POST /cgi-bin/client_login HTTP/1.1\r\n" "Accept: image/gif, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*\r\n" "Accept-Language: zh-cn\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Accept-Encoding: gzip, deflate\r\n" "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; (R1 1.5))\r\n" "Host: %s:81\r\n" "Content-Length: %d\r\n" "Connection: Keep-Alive\r\n" "Cache-Control: no-cache\r\n\r\n" "wlanacname=&wlanuserip=%s&user=%s&domain=&pass=%s&random=%s&sign=%s&command=0&ghj=%s\r\n\0" ,S_IP ,i ,C_IP ,user ,pass ,Random ,sign ,ip); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(S_IP); addr.sin_port = htons(81); s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); connect(s,(struct sockaddr *)&addr,sizeof(addr)); send(s,genbuf,strlen(genbuf),0); i = recv(s,genbuf,1024,0); close(s); if(i) { *(genbuf+i) = '\0';// cout<<genbuf<<endl; printf("%s\n",genbuf); } //提取 serial_number char *ptr,*ptr2; ptr = strstr(genbuf,"ok;")+3; ptr = strstr(ptr,";"); ptr++; ptr = strstr(ptr,";")+1; ptr2 = ptr; ptr = strstr(ptr,";"); *ptr = '\0'; strcpy(serial_number,ptr2);// cout<<serial_number<<endl; printf("%s\n",serial_number);//====以上是登录部分//====以下是登录完成后每隔30秒,发送一个数据包,以KEEP ALIVE addr.sin_port = htons(888); s = socket(AF_INET,0,IPPROTO_UDP); for(i=1;;i++) { sleep(30); randomize(); jiami((unsigned char *)C_IP,( char *)ip); jiami((unsigned char *)SIGN,( char *)sign); sprintf(key,"0;%d;\0\0",i); // cout<<key<<endl; printf("%s",key); jiami((unsigned char *)key, ( char *)pass); sprintf(genbuf,"%s;%s;%s;%s;%s;ghj;\0", pass,ip,serial_number,Random,sign); // cout<<genbuf<<endl; sendto(s,genbuf,strlen(genbuf)+1,0,(struct sockaddr *)&addr,sizeof(addr)); // cout<<genbuf<<endl; } //蚊换
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -