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

📄 findproxy.cpp

📁 设置代理
💻 CPP
字号:
/******************************************************************************
Module:  FindProxy.cpp
Notices: Copyright (c) 2006 Lenus Margin
******************************************************************************/
#include "FindProxy.h"

extern IPPORT ProxyIP;

HANDLE hMaxThread;
int nfail,nSuccess;
////////////////////////////////////////////////////////////////////////
BOOL FindProxy(HWND hwnd)
{
	nSuccess=0;
	nfail=65536;
	CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)SearchIP,0,0,0);
	return FALSE;
}

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

void WorkThread(int calc)
{
	int ret;
	char *StartIP		= "10.10.0.1";
	unsigned short  PORT[3]	= {808,8080,80};
	struct sockaddr_in proxy;

	proxy.sin_family		= AF_INET;
	proxy.sin_addr.S_un.S_addr	= htonl(ntohl(inet_addr(StartIP))+calc);
	proxy.sin_port			= htons(PORT[0]);

	
	ret =CheckProxy(&proxy);
	if(ret == 1)
		nSuccess=1;
	else
		nfail--;
	ReleaseSemaphore(hMaxThread,1,0);
}

////////////////////////////////////////////////////////////////////////
int SearchIP(void)
{
	int i;
	// do some usually...

	// do the probe
	hMaxThread = CreateSemaphore(NULL,2000,2000,NULL);
	for(i=0;i<=65535;i++)
	{
		if(nSuccess)
			return TRUE;	// 一旦找到一个就不再向下寻找了
		WaitForSingleObject(hMaxThread,INFINITE);
		CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)WorkThread,(LPVOID)i,0,0);
	}
	while(nfail){Sleep(1000);}

	return FALSE;
}
////////////////////////////////////////////////////////////////////////
int CheckProxy(struct sockaddr_in *ip)
{
	WSADATA ws;
	SOCKET	s;
	int ret,Retselect;
	timeval tt;
	fd_set rsock;
	char buf[2048];
	char *CheckMsg="GET http://www.google.com/intl/zh-CN/ HTTP/1.0\n\n";

	if (WSAStartup(MAKEWORD(2,2), &ws) != 0)
	{
		ret = -1;
		goto exit;
	}

	s = socket(AF_INET, SOCK_STREAM, 0);
	if (s == INVALID_SOCKET)
	{
		ret = -2;
		goto error;
	}

	if(ip->sin_addr.S_un.S_addr == 0)
	{
		ret =  -3;
		goto error;
	}
	if(ip->sin_port == 0)
	{
		ret = -4;
		goto error;
	}

	if(connect(s, (struct sockaddr *)ip, sizeof(sockaddr)) == SOCKET_ERROR)
	{
		ret = -5;
		goto error;
	}
	send(s,CheckMsg,strlen(CheckMsg),0);

	tt.tv_sec = 5;
	tt.tv_usec = 0;
	FD_SET(s,&rsock);
	Retselect = select(NULL,&rsock,0,0,&tt);

	if(0 != Retselect || SOCKET_ERROR != Retselect)
	{
		recv(s,buf,sizeof(buf),0);
		if(strstr(buf,"Google"))
			ret = 1;
		else
			ret = 0;
	}
	else
		ret = -6;

error:
	closesocket(s);
exit:
	WSACleanup();
	return ret;
}

int TestIP(HWND hwnd)
{
	int ret=0;
	struct sockaddr_in ip;
	
	if(!CheckIP(hwnd))
		return -1;
	
	ip.sin_addr.S_un.S_addr = inet_addr(ProxyIP.strIP);
	ip.sin_port		= htons((unsigned short)ProxyIP.port); 
	ip.sin_family		= AF_INET;

	if(1 == CheckProxy(&ip))
		ret = 1;
	else
		ret = 0;
	return ret;
}

⌨️ 快捷键说明

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