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

📄 superchargerdlg.cpp

📁 Boosts Browsing Speeds Up To 3,000 Times Faster.zip
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// SuperChargerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SuperCharger.h"
#include "SuperChargerDlg.h"
#include <winsock2.h>
#include "MSTcpIP.h"
#include "IPStructs.h"
#include "ipadddel.h"
#include "DomainDlg.h"
#include "Registry.h"
#include "HostsFile.h"


// NEEDED FOR REMOVE TABS
//////////////////////////////////////////////
//#include <fstream.h>  //includes <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
//////////////////////////////////////////////

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


UINT  DoRawListen(void *pptr);
int GetDNSName(char *lpDNSName, char *DottedName);

#define MAXPACKETSIZE  1600
#define SELECTARRAYSIZE 200

extern CSuperChargerDlg *g_pDlg;

int	   hSHandle;
static BOOL	IsListening;
static BOOL	DoBeep;


/////////////////////////////////////////////////////////////////////////////
// CSuperChargerDlg dialog

CSuperChargerDlg::CSuperChargerDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSuperChargerDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSuperChargerDlg)
	m_save_filename = _T("");
	m_save_file_text = _T("");
	m_append_box = FALSE;
	m_number_received = 0;
	m_total_requests = 0;
	//}}AFX_DATA_INIT
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);


}

CSuperChargerDlg::~CSuperChargerDlg()
{
	//Don't forget to wipe your ass!

}

void CSuperChargerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSuperChargerDlg)
	DDX_Control(pDX, IDC_PIC1, m_Picture1);
	DDX_Control(pDX, IDC_STATUS, m_edtStatus);
	DDX_Control(pDX, CBO_OPT, m_cboOpt);
	DDX_Control(pDX, LIST_HOSTS, m_dns_name_list);
	DDX_Control(pDX, IDC_COMBO1, m_ip_address_box);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSuperChargerDlg, CDialog)
	//{{AFX_MSG_MAP(CSuperChargerDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(BTN_START, OnStartButton)
	ON_BN_CLICKED(BTN_STOP, OnStopButton)
	ON_BN_CLICKED(BTN_SAVE, OnSaveListButton)
	ON_BN_CLICKED(BTN_RESET, OnResetButton)
	ON_BN_CLICKED(CHK_BEEP, OnBeep)
	ON_BN_CLICKED(BTN_ADD_DOMAIN, OnAddDomain)
	ON_BN_CLICKED(BTN_BROWSE, OnBrowse)
	ON_NOTIFY(NM_DBLCLK, LIST_HOSTS, OnDblClkHosts)
	ON_BN_CLICKED(BTN_APPLY_DUN, OnApplyDun)
	ON_BN_CLICKED(BTN_HELP, OnHelp)
	ON_BN_CLICKED(BTN_ADD_SUPER_HOSTS, OnAddSuperHosts)
	ON_WM_DESTROY()
	ON_WM_QUERYENDSESSION()
	ON_BN_CLICKED(IDC_cmdQuit, OncmdQuit)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_cmdAbout, OncmdAbout)
	ON_BN_CLICKED(BTN_TVTOOLBAR, OnTVToolbar)
	ON_CBN_SELCHANGE(CBO_OPT, OnSelChangeOpt)
	ON_CBN_SELCHANGE(IDC_COMBO1, OnSelChangeCombo1)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_LOADHOSTS_FINISHED, OnLoadHostsFinished)
END_MESSAGE_MAP()




/////////////////////////////////////////////////////////////////////////////
// CSuperChargerDlg message handlers

BOOL CSuperChargerDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

	if (m_Picture1.Load(MAKEINTRESOURCE(IDR_GIF1),_T("GIF"))) {
		m_Picture1.Draw();
	}

	char szMsg[120];
	struct WSAData 	zWSAData ;

	int	rc = WSAStartup ( 0x0101 , &zWSAData );
	if ( rc ) {
		if ( rc == WSASYSNOTREADY ) 
			wsprintf ( szMsg , "Drivers Not Loaded!!" );
		else 		
			wsprintf ( szMsg , "Start up Error %d", rc );
		::MessageBox(GetSafeHwnd(), szMsg, "Winsock Init Error",MB_OK);
		return 1;
	}	
	
	//char windir[64];
	//GetEnvironmentVariable("windir",windir,64);

	//m_save_filename = "\\temphosts";
	m_save_filename = (LPCSTR)g_Global.szHosts;

	m_number_received = 0;
	m_total_requests  = 0;
	UpdateData(FALSE);	

	ip_entry iptable[100];		//Table of strucures containing IP addresses and subnet masks

	int	nNumberOfIPs = GetAllIPAddresses( &iptable[0],100);	
	for (int i=0; i< nNumberOfIPs; i++)
	m_ip_address_box.AddString (iptable[i].ip_address);	
	m_ip_address_box.SetCurSel(0);


	///////////////////////////////////////////////////////
	CListCtrl* pList = (CListCtrl*) GetDlgItem(LIST_HOSTS);
	ASSERT(pList != NULL);

	pList->InsertColumn(0, _T("IP - Domain - #Comments"));

	pList->SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES|LVS_EX_FLATSB|LVS_EX_FULLROWSELECT);
	pList->SetColumnWidth(0,500);

	CBAddStringAndData(this, CBO_OPT, _T("Append  Hosts"), 0);
	CBAddStringAndData(this, CBO_OPT, _T("Replace Hosts"), 1);
	CBAddStringAndData(this, CBO_OPT, _T("Save List As"),  2);
	m_cboOpt.SetCurSel(1);

	//////////////////////////////////////////////////////////
	OSVersion();
	//SetDlgItemText(IDC_WINVER, WinVer);

	csMaxMTU.Empty();

	////////////////////////////////////////////////////////////

	////////////////////////////////////////////////////////////
	CComboBox* pCBoxMaxMTU = (CComboBox*)GetDlgItem(IDC_CBO_MAXMTU);
	pCBoxMaxMTU->SetCurSel(0);
    CButton* pChkMaxMTU = (CButton*)GetDlgItem(IDC_CHK_MAXMTU);
    pChkMaxMTU->SetCheck(TRUE);
	////////////////////////////////////////////////////////////
	CComboBox* pCBoxRWIN = (CComboBox*)GetDlgItem(IDC_CBO_RWIN);
	pCBoxRWIN->SetCurSel(0);
    CButton* pChkRWIN = (CButton*)GetDlgItem(IDC_CHK_RWIN);
    pChkRWIN->SetCheck(TRUE);
	////////////////////////////////////////////////////////////
	CComboBox* pCBoxTTL = (CComboBox*)GetDlgItem(IDC_CBO_TTL);
	pCBoxTTL->SetCurSel(2);
    CButton* pChkTTL = (CButton*)GetDlgItem(IDC_CHK_TTL);
    pChkTTL->SetCheck(TRUE);
	////////////////////////////////////////////////////////////
	CComboBox* pCBoxSKA = (CComboBox*)GetDlgItem(IDC_CBO_SKA);
	pCBoxSKA->SetCurSel(0);
    CButton* pChkSKA = (CButton*)GetDlgItem(IDC_CHK_SKA);
    pChkSKA->SetCheck(TRUE);
	////////////////////////////////////////////////////////////
	CComboBox* pCBoxKAT = (CComboBox*)GetDlgItem(IDC_CBO_KAT);
	pCBoxKAT->SetCurSel(0);
    CButton* pChkKAT = (CButton*)GetDlgItem(IDC_CHK_KAT);
    pChkKAT->SetCheck(TRUE);
	////////////////////////////////////////////////////////////
	CComboBox* pCBoxKAI = (CComboBox*)GetDlgItem(IDC_CBO_KAI);
	pCBoxKAI->SetCurSel(0);
    CButton* pChkKAI = (CButton*)GetDlgItem(IDC_CHK_KAI);
    pChkKAI->SetCheck(TRUE);
	////////////////////////////////////////////////////////////
    CButton* pChkAutoDiscovery = (CButton*)GetDlgItem(IDC_CHK_AUTODIS);
	pChkAutoDiscovery->SetCheck(1);

	SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);	

	return TRUE;  // return TRUE  unless you set the focus to a control

}


// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CSuperChargerDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

HCURSOR CSuperChargerDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}




// Don't want dialog to close when user presses Enter.
void CSuperChargerDlg::OnOK() 
{
	/*
	UpdateData(TRUE);
	if (IsListening) {
		UpdateData(TRUE);
		closesocket ( hSHandle );
		m_edtStatus.SetWindowText("Not Listening");
		UpdateData(FALSE);
		IsListening = FALSE;	
		::MessageBox(NULL, _T("Will Close Listening Mode\nPress Button Again!"), 
			   _T("Must Stop Listening First!"),
				MB_ICONINFORMATION|MB_OK|MB_DEFBUTTON1);
		return;
	}
	*/
	return;
}

// Handles WM_QUERYENDSESSION
BOOL CSuperChargerDlg::OnQueryEndSession() 
{
	// Force current operation (if any) to abort.
	//m_bUserAbort = TRUE;
	//if (!CDialog::OnQueryEndSession())
	//	return FALSE;

	return TRUE;
}


void CSuperChargerDlg::OnStartButton() 
{
UINT (AFX_CDECL *MyThread)(LPVOID);

	#define IP_HDRINCL          2  /* header is included with data */
	int rc;
	struct sockaddr_in      sa_in;
	DWORD   dwBytesReturned=0;
	DWORD   dwBufferLen;
	ULONG rcvall = 1;
	int on       = 1; 
	CString	szMsg;

	if (IsListening) {
		MessageBeep(100);
		return;
	}

	UpdateData(TRUE);


	hSHandle  = WSASocket ( AF_INET, SOCK_RAW , 0 , NULL,0,WSA_FLAG_OVERLAPPED );
	if ( hSHandle == SOCKET_ERROR ) 
	{
		szMsg.Format("socket() failed, errno=%d", WSAGetLastError());
		::MessageBox(GetSafeHwnd(), szMsg,"socket",MB_OK);
		return;
	}
//	int bufsize = 32000;
//	rc = setsockopt(hSHandle,IPPROTO_RAW, SO_RCVBUF  ,(char*)&bufsize,sizeof(int)); 
//	if ( rc == SOCKET_ERROR )	{
//		szMsg.Format("SetSockOpt RECVBUSSIZE Failed eroro = %d", GetLastError());
//		closesocket(hSHandle);
//		::MessageBox(GetSafeHwnd(), szMsg,"setsockopt",MB_OK);
//		return;
//	}
	sa_in.sin_family      = AF_INET;
	sa_in.sin_port        = 0;
	CString csIP;
	int nDx	= m_ip_address_box.GetCurSel();
	m_ip_address_box.GetLBText(nDx,csIP);

	sa_in.sin_addr.s_addr = inet_addr(csIP);

	rc = bind ( hSHandle, (struct sockaddr *) &sa_in , sizeof( sa_in ) );
	if ( rc == SOCKET_ERROR ) {
		rc = WSAGetLastError();
		if ( rc != WSAEINPROGRESS ) {
			szMsg.Format( "bind() failed, errno=%d", rc );
			::MessageBox(GetSafeHwnd(), szMsg,"BIND",MB_OK);
			closesocket ( hSHandle );
			return;
		}
	}		
	rc = WSAIoctl(hSHandle, SIO_RCVALL, &rcvall, sizeof(ULONG), &dwBufferLen, 
					sizeof(dwBufferLen),&dwBytesReturned, NULL, NULL);
	if ( rc == SOCKET_ERROR )  {
		rc = WSAGetLastError();
		if ( rc != WSAEINPROGRESS ) {
			szMsg.Format("Ioctl() failed, errno=%d\n", rc );
			::MessageBox(GetSafeHwnd(), szMsg, "Network Ioctl",MB_OK);
		}
	}
	
	IsListening = TRUE;
	CString m_status;
	m_status.Format("%s%d/%d","Listening ",m_number_received,m_total_requests);
	m_edtStatus.SetWindowText((LPCSTR)m_status);

	MyThread = (DoRawListen);		
	 AfxBeginThread (MyThread  , NULL );
	UpdateData(FALSE);
	
}


void CSuperChargerDlg::OnStopButton() 
{
	UpdateData(TRUE);
	closesocket ( hSHandle );
	m_edtStatus.SetWindowText("Not Listening");
	UpdateData(FALSE);
	IsListening = FALSE;	
}


void CSuperChargerDlg::AddName(CString name_to_add)
{
	char iTemp[32]; 

	itoa(++m_total_requests,iTemp,10);
	//m_total_requests_ctrl.SetWindowText(iTemp);

	//int	nDx = m_dns_name_list.FindStringExact (0, name_to_add);
	//int	nDx = m_dns_name_list.FindItem(FindStringExact (0, name_to_add);
	//if ( nDx != LB_ERR ) return;		//already in list


	LPCTSTR lpszmyString = name_to_add;
	LVFINDINFO info;
	info.flags = LVFI_PARTIAL|LVFI_STRING;
	info.psz = lpszmyString;
	
	if(m_dns_name_list.FindItem(&info) != -1)
		return;

	int i = m_dns_name_list.GetItemCount();

	CString csData;
	csData = "127.0.0.1   "+name_to_add+"   #IP Blocker(tm)";
	InsertIPDomain(i,csData,0);

	itoa(++m_number_received,iTemp,10);

	CString m_status;

	if (IsListening)
	{
		m_status.Format("%s%d/%d","Listening ",m_number_received,m_total_requests);
		m_edtStatus.SetWindowText((LPCSTR)m_status);
	}
	else
		m_edtStatus.SetWindowText("NOT Listening");

}




UINT  DoRawListen(void *pptr)
{
	#define DNSPORT 53
	#define MAXDNSNAMESIZE 1024

	struct sockaddr saddr;
	int rc,fromlen=sizeof(struct sockaddr);
	PIPHEADER iphdr;
	char buf[MAXPACKETSIZE],add_name[MAXDNSNAMESIZE];
	CString	szMsg;

	while(1) {

		if (IsListening == FALSE) break;
		rc = recvfrom( hSHandle ,buf,MAXPACKETSIZE,NULL, &saddr, &fromlen);
		if ( rc == SOCKET_ERROR ) {
			rc = WSAGetLastError();
			if ( rc != WSAEINPROGRESS ) {
				szMsg.Format("recvfrom() failed, error =%d", rc );
				return 1;;
			}
		}
		// Your Filter goes here. Don't do too much processing,
		// or you may drop packets
		iphdr = (PIPHEADER) buf;
		int dsnport = htons(DNSPORT);
		if ((iphdr->UDP_src_port == dsnport)  ||
			(iphdr->UDP_DEST_port  == dsnport))	{
			if (DoBeep) 
				MessageBeep(5000);
			GetDNSName(&iphdr->data[12], add_name);
			g_pDlg->AddName(add_name);
		}
	}
	closesocket ( hSHandle );
	AfxEndThread(0);
	return 0;  
}



//DNS name in request packet is length followed by name. 
//Zero length denotes end of DNS name
int GetDNSName(char *lpDNSName, char *DottedName)
{
	int tot_len, len;
	char *ptr1, *ptr2;

	ptr1    = lpDNSName;
	ptr2    = DottedName;
	*ptr2   = 0;
	if ( *ptr1 == 0 ) return 0;
	tot_len = 0;
	while ( 1 ) {
		if ( *ptr1 == 0 ) break;
		len = (int) *ptr1++;
		tot_len += len+1;
		for (int i=0; i<len; i++) 
			*ptr2++ = *ptr1++;
		*ptr2++ = '.';
	}
	*ptr2--;
	*ptr2  = 0;
	return tot_len+1;
}



void CSuperChargerDlg::OnResetButton() 
{
	UpdateData(TRUE);
	if (IsListening) {
		UpdateData(TRUE);
		closesocket ( hSHandle );
		m_edtStatus.SetWindowText("Not Listening");
		UpdateData(FALSE);
		IsListening = FALSE;

⌨️ 快捷键说明

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