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

📄 passport.cc

📁 linux上网直通车的整个程序(含源程序)初版(可供局域网
💻 CC
📖 第 1 页 / 共 2 页
字号:
// Passport.cpp: implementation of the Passport class.////////////////////////////////////////////////////////////////////////#include <unistd.h>#include <sys/socket.h>#include <arpa/inet.h>#include <unistd.h>#include <fcntl.h>#include <errno.h>#include <stdio.h>#include <string.h>#include "Passport.h"//#define _DEBUG_//////////////////////////////////////////////////////////////////////// Construction/Destruction////////////////////////////////////////////////////////////////////////Passport::Passport():utf8_to_gbk("utf-8","gbk")Passport::Passport()	{		m_ConnectionTimeout = 5; //Default...		//-----------------------------------	m_Buffer = NULL;	m_CookieList = NULL;	//------------------------------	//m_User[30] = NULL;	//m_Pass[20] = NULL;	memset(m_User,0,sizeof(m_User));	memset(m_Pass,0,sizeof(m_Pass));	//------------------------------	memset(m_ErrorText,0,sizeof(m_ErrorText));	strcpy(m_ErrorText, "欢迎您使用Kpassport 0.01\n");		m_International = false;		m_Address = inet_addr("202.104.245.179");	strcpy(m_Host, "auth.stu.edu.cn");	strcpy(m_LoginASPX, "/auth/login.aspx");	strcpy(m_SuccessASPX, "/auth/logonSuccess.aspx");}Passport::~Passport(){	CookieList * CL;	if (m_Buffer != NULL){		delete(m_Buffer);		m_Buffer = NULL;	}	CL = m_CookieList;	while (CL != NULL){		delete(CL->Name);		delete(CL->Value);		CL = CL->Next;	}}int Passport::Login(char *User,char *Pass){	char HTTP[2048] = {0,};	char BODY[1024] = {0,};	int i;	char * Temp;	Temp = User;	i = 0;	while (i < 30){		i = EncodeData(m_User, i, *Temp);		Temp++;        //------------------------------------------------------------------        //	if (*Temp == NULL) break;        if (*Temp == '\0') break;        //------------------------------------------------------------------	        	}	//-------------------------	//m_User[i] = NULL;	m_User[i] = '\0';	//---------------------------	Temp = Pass;	i = 0;	while (i < 30){		i = EncodeData(m_Pass, i, *Temp);		Temp++;		//if (*Temp == NULL) break;----------------------------------		if (*Temp == '\0') break;		//-----------------------------------------------------------	}	//m_Pass[i] = NULL;	m_Pass[i] = '\0';	//---------------------------------------------------#ifdef _DEBUG_	printf("\nUser===: %s  Pass====: %s\n\n", m_User, m_Pass);#endif	//-----------------------------	// GetStart ViewState	//-----------------------------	sprintf(HTTP, HTTP_GET, m_LoginASPX, m_Host, "");#ifdef _DEBUG_	printf("GET Header:\n%s\n\n", HTTP);#endif		if (Post(HTTP) != 0) 		return false;#ifdef _DEBUG_	printf("Buffer Data:\n%s\n", m_Buffer);#endif	if (!GetViewState()) 		return false;#ifdef _DEBUG_	printf("ViewState: %s\n", m_ViewState);#endif	//-----------------------------	// Post Login Message	//-----------------------------	// %1 : Password (S)	// %2 : UserName (S)	// %3 : Image X (D)	// %4 : Image Y (D)	// %5 : ViewState (S)	sprintf(BODY, LOGIN_BODY, m_Pass, m_User, 10, 11, m_ViewState);	//-----------------------------	// Visit International Web?	//-----------------------------	if (m_International){		strcat(BODY, "&inland=1");	}	// %1 : URI Address (S)	// %2 : Host Name (auth.stu.edu.cn) (S)	// %3 : Body Length (D)	// %4 : Cookie (S)	sprintf(HTTP, HTTP_POST, m_LoginASPX, m_Host, strlen(BODY), m_Cookie);	strcat(HTTP, BODY);#ifdef _DEBUG_	printf("POST Header:\n%s\n", HTTP);#endif	if (Post(HTTP) != 0) 		return false;#ifdef _DEBUG_	printf("Buffer Data:\n%s\n", m_Buffer);#endif	switch (m_ReplyCode){	case 2: // Maybe Pass Or Name Error		switch (GetMsg("error", BODY)){		case 0: strcpy(m_ErrorText, BODY);		case 1: return false;		default: strcpy(m_ErrorText, "未知的服务器错误!");			return false;		};	case 3: // Maybe Login Success		if (!GetLocation(BODY)) return false;#ifdef _DEBUG_        printf("Location: %s\n", BODY);#endif		strcpy(m_RefreshURL, BODY);		return Refresh();	case 4: // Data Error		strcpy(m_ErrorText, "服务器拒绝访问!");		return false;	case 5:		strcpy(m_ErrorText, "服务器错误! 请联系网络中心修理服务器!");		return false;	default:		return false;	};}int Passport::Logout()//void Passport::LOgout(int noreturn){	char HTTP[2048] = {0,};	char BODY[1024] = {0,};	//-----------------------------	// %1 : UserName (S)	// %2 : Image X (D)	// %3 : Image Y (D)	// %4 : ViewState (S)	//-----------------------------#ifdef _DEBUG_	printf("Buffer Data:\n%s\n", m_Buffer);#endif	if (GetViewState()){		sprintf(BODY, LOGOUT_BODY, m_User, 3, 5, m_ViewState);		sprintf(HTTP, HTTP_POST, m_RefreshURL, m_Host, strlen(BODY), m_Cookie);		strcat(HTTP, BODY);#ifdef _DEBUG_        printf("Post Header:\n%s\n", HTTP);#endif		if (Post(HTTP) == 0){#ifdef _DEBUG_            printf("Buffer Data:\n%s\n", m_Buffer);#endif			strcpy(m_ErrorText, "已经向服务器发送Logout请求!");			return true;		}	}	return false;}int Passport::Refresh(){	char Msg[128] = {0,};	char HTTP[2048] = {0,};	//----------------------------	// Refresh OnLine Page	//----------------------------	sprintf(HTTP, HTTP_GET, m_RefreshURL, m_Host, m_Cookie);#ifdef _DEBUG_	printf("GET Header:\n%s\n\n", HTTP);#endif	if (Post(HTTP) != 0) return false;#ifdef _DEBUG_	printf("Buffer Data:\n%s\n", m_Buffer);#endif	//if (stricmp(m_SuccessASPX, m_RefreshURL) <= 0){	if (strstr(m_Buffer, "<title>Internet Online</title>")){		switch (m_ReplyCode){		case 2:			//if (strstr(m_Buffer, "<title>Internet Online</title>")){			if (GetMsg("showMessage", Msg) == 0){				strcpy(m_ErrorText, Msg);			}else {				strcpy(m_ErrorText, "你已经成功登录!");			}			return true;		default: strcpy(m_ErrorText, "登录失败!");			return false;		};	}else {		switch (GetMsg("error", Msg)){		case 0: strcpy(m_ErrorText, Msg);		case 1: return false;		default: strcpy(m_ErrorText, "未知的服务器错误!");			return false;		};	}}char * Passport::GetLastError(){	if (strlen(m_ErrorText) > 0){        return m_ErrorText;			}else {	        		return NULL;	}}int Passport::Post(char *Data){	//--------------------------------------------------------------------	//初始化socket -	//--------------------------------------------------------------------        int  sk; 	struct sockaddr_in   server;	int    Ret, Len, Sum;	char  *Found = NULL;		//====================NON-BLUCKING SOCKET=====================	int     flags, n, error;        socklen_t len;        fd_set rset, wset;        struct timeval tval;		//=============================================================	sk = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);        if( sk== -1 )	{		strcpy(m_ErrorText, "创建Socket连接变量错误!");		return 1; //NetWork Error	}#ifdef _DEBUG_	printf("Socket Created!\n");#endif	server.sin_family = AF_INET;	server.sin_port   = htons(80);	server.sin_addr.s_addr = m_Address;	//---------------------------------------------------------------------------------	// 要加入域名解析部分	//---------------------------------------------------------------------------------	//设置为非阻塞	flags = fcntl(sk, F_GETFL,0);	fcntl(sk, F_SETFL, flags | O_NONBLOCK);        error = 0;		//============================================================       if (connect(sk, (struct sockaddr *)&server, sizeof(server)) == -1 )       {	   if (errno != EINPROGRESS)	   {		close(sk);		strcpy(m_ErrorText, "连接服务器错误!");	 	return 2; //NetWork Error	   }   	    //=========================================           FD_ZERO(&rset);           FD_SET(sk, &rset);           wset = rset;           tval.tv_sec = m_ConnectionTimeout;           tval.tv_usec = 0;           if ( (n = select(sk + 1, &rset, &wset, NULL, m_ConnectionTimeout ? &tval : NULL)) == 0) 	   {                close(sk);          /* timeout */                errno = ETIMEDOUT;		strcpy(m_ErrorText, "连接服务器错误!");		return 2; //NetWork Error????????????????????????????????                //return (-1);	   }           if (FD_ISSET(sk, &rset) || FD_ISSET(sk, &wset)) 	   {                  len = sizeof(error);	  	  if (getsockopt(sk, SOL_SOCKET, SO_ERROR, &error, &len) < 0)		  {		  	 //return (-1);     /* Solaris pending error */			  close(sk);          /* timeout */                          errno = ETIMEDOUT;	                  strcpy(m_ErrorText, "连接服务器错误!");	                  return 2; //NetWork Error			 		  }	   } 	   else	   {		 // printf("select error: sockfd not set");                  //close(sk);          /* timeout */                  errno = ETIMEDOUT;		  strcpy(m_ErrorText, "连接服务器错误!:socket not set");		  return 2; //NetWork Error		  ///exit(1);	   }        }             //==================Set Blocked=================================       /* restore file status flags */       fcntl(sk, F_SETFL, flags);              //====================================================#ifdef _DEBUG_	printf("Server Connected!\n");#endif	//---------------------------------------------------------------------------------	// 发送请求信息	//--------------------------------------------------------------------------------	Sum = 0;	Len = strlen(Data);	while (Len > 0)	{		Ret = send(sk, (Data + Sum), Len, 0);		if (Ret <= 0)		{                        close(sk);			strcpy(m_ErrorText, "发送请求出错!");			return 3;		}		else 		{			Sum += Ret;			Len -= Ret;		}	}#ifdef _DEBUG_	printf("Data Sent OK! [%d]\n", Sum);#endif	//----------------------------------------------------------------------------------	// Begin Recv Data	//----------------------------------------------------------------------------------	if (m_Buffer == NULL)	{		m_Buffer = new(char[KP_BUFFER_SIZE + 1]);		//m_Buffer[KP_BUFFER_SIZE] = NULL;#ifdef _DEBUG_		printf("Buffer Created! \n");#endif	}	Sum = 0;	while (Sum < KP_BUFFER_SIZE)	{		Ret = recv(sk, (m_Buffer + Sum), (KP_BUFFER_SIZE - Sum), 0);		if (Ret <= 0)

⌨️ 快捷键说明

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