📄 findproxy.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 + -