getproxysetting.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:7k
源码类别:

模拟服务器

开发平台:

C/C++

  1. ////////////////////////////////////////////////////////////////////////////////
  2. //  
  3. //  FileName    :   GetProxySetting.cpp
  4. //  Version     :   1.0
  5. //  Creater     :   Linsuyi
  6. //  Date        :   2002.01.21  15:40
  7. //  Comment     :   Kingsoft Windows Proxy Getting source file
  8. //  
  9. ////////////////////////////////////////////////////////////////////////////////
  10. #include "Stdafx.h"
  11. #include "GetProxySetting.h"
  12. static const char g_szRegistryIESettingPath[] =     
  13.     "Software\Microsoft\Windows\CurrentVersion\Internet Settings";
  14. static int GetIEProxySetString(int nProxySetSize, char *pszProxySetString)
  15. {
  16.     int nResult = 0;
  17.     
  18.     LONG lRetCode = 0;
  19.     HKEY hRegKey = NULL;
  20.     DWORD dwLength = 0;
  21.     
  22.     lRetCode = RegOpenKeyEx(
  23.         HKEY_CURRENT_USER,
  24.         g_szRegistryIESettingPath,
  25.         0L,
  26.         KEY_QUERY_VALUE,
  27.         &hRegKey
  28.     );
  29.     if (lRetCode != ERROR_SUCCESS)
  30.         goto Exit0;
  31.     
  32.     ZeroMemory(pszProxySetString, nProxySetSize);
  33.     nProxySetSize--;
  34.     if (nProxySetSize < 250)
  35.         goto Exit0;
  36.     
  37.     dwLength = (DWORD)nProxySetSize;
  38.     
  39.     lRetCode = RegQueryValueEx(
  40.         hRegKey,
  41.         "ProxyServer",
  42.         NULL,
  43.         NULL,
  44.         (LPBYTE)pszProxySetString,
  45.         &dwLength
  46.     );
  47.     if (lRetCode != ERROR_SUCCESS)
  48.         goto Exit0;
  49.     
  50.     nResult = ::lstrlen(pszProxySetString);
  51.     
  52. Exit0:
  53.     if (hRegKey != NULL)
  54.     {
  55.      RegCloseKey(hRegKey);
  56.         hRegKey = NULL;
  57.     }
  58.     
  59.     return nResult;
  60. }
  61. int GetIEProxyValid()
  62. {
  63.     int nResult = IEPROXY_NONE;
  64.     int nRetCode = false;
  65.     
  66.     int nPos = -1;
  67.     CString strProxyString;
  68.     
  69.     int nProxySetSize = 1024;
  70.     LPTSTR lpszProxyString = NULL;
  71.     
  72.     lpszProxyString = strProxyString.GetBuffer(nProxySetSize);
  73.     if (NULL == lpszProxyString)
  74.         goto Exit0;
  75.     
  76.     nRetCode = GetIEProxySetString(nProxySetSize, lpszProxyString);
  77.     
  78.     strProxyString.ReleaseBuffer();
  79.     if (!nRetCode)
  80.         goto Exit0;
  81.     
  82.     strProxyString.MakeLower();
  83.     nPos = strProxyString.Find("http=");    // HTTP GET Proxy
  84.     if (-1 == nPos)
  85.     {
  86.         nPos = strProxyString.Find(";");
  87.         if (nPos != -1)
  88.             goto Exit0;
  89.         
  90.         nResult |= IEPROXY_HTTP;
  91.         goto Exit1;
  92.     }
  93.     nResult |= IEPROXY_HTTP;
  94.     
  95.     nPos = strProxyString.Find("socks=");
  96.     if (nPos != -1)
  97.         nResult |= IEPROXY_SOCKS;
  98.     
  99.     nPos = strProxyString.Find("ftp=");
  100.     if (nPos != -1)
  101.         nResult |= IEPROXY_FTP;
  102.     
  103. Exit1:
  104. Exit0:
  105.     return nResult;
  106. }
  107. int GetIEProxyHttp(int nSvrNameSize, char *pszProxySvrName, int *pnProxyPort)
  108. {
  109.     int nResult = false;
  110.     int nRetCode = 0;
  111.     
  112.     int nPos = -1;
  113.     CString strProxyString;
  114.     CString strProxyServer;
  115.     
  116.     int nProxySetSize = 1024;
  117.     LPTSTR lpszProxyString = NULL;
  118.     
  119.     //分析Proxy的设置
  120.     //http=193.168.10.1:80;socks=192.168.10.235:1080
  121.     //193.168.10.1:1090
  122.     //ftp=193.168.10.1:1090;gopher=193.168.10.1:1090;https=193.168.10.1:1090;socks=193.168.10.2:1080
  123.     
  124.     lpszProxyString = strProxyString.GetBuffer(nProxySetSize);
  125.     if (NULL == lpszProxyString)
  126.         goto Exit0;
  127.     nRetCode = GetIEProxySetString(nProxySetSize, lpszProxyString);
  128.     
  129.     strProxyString.ReleaseBuffer();
  130.     if (nRetCode <= 0)
  131.         goto Exit0;
  132.     
  133.     if (strProxyString.IsEmpty())
  134.         goto Exit0;
  135.     
  136.     strProxyString.MakeLower();
  137.     nPos = strProxyString.Find("http=");    // HTTP GET Proxy
  138.     if (-1 == nPos)
  139.     {
  140.         nPos = strProxyString.Find(";");
  141.         if (nPos != -1)
  142.             goto Exit0;
  143.     }
  144.     else
  145.     {
  146.         strProxyString = strProxyString.Mid(nPos + lstrlen("http="));
  147.         
  148.         nPos = strProxyString.Find(";");
  149.         if (nPos != -1)
  150.             strProxyString = strProxyString.Left(nPos);
  151.     }
  152.     
  153.     nPos = strProxyString.Find(":");
  154.     if (nPos <= 0)
  155.         goto Exit0;
  156.     
  157.     strProxyServer = strProxyString.Left(nPos);
  158.     nRetCode = strProxyServer.GetLength();
  159.     if (nRetCode >= nSvrNameSize)
  160.         goto Exit0;
  161.     
  162.     ::lstrcpy(pszProxySvrName, strProxyServer);
  163.     
  164.     if (pnProxyPort != NULL)
  165.         *pnProxyPort = _ttoi(strProxyString.Mid(nPos + 1)); 
  166.     
  167.     nResult = true;
  168.     
  169. Exit0:
  170.     return nResult;
  171. }
  172. int GetIEProxySocks5(int nSvrNameSize, char *pszProxySvrName, int *pnProxyPort)
  173. {
  174.     int nResult = false;
  175.     int nRetCode = 0;
  176.     
  177.     int nPos = -1;
  178.     CString strProxyString;
  179.     CString strProxyServer;
  180.     
  181.     int nProxySetSize = 1024;
  182.     LPTSTR lpszProxyString = NULL;
  183.     
  184.     //分析Proxy的设置
  185.     //http=193.168.10.1:80;socks=192.168.10.235:1080
  186.     //193.168.10.1:1090
  187.     //ftp=193.168.10.1:1090;gopher=193.168.10.1:1090;https=193.168.10.1:1090;socks=193.168.10.2:1080
  188.     
  189.     lpszProxyString = strProxyString.GetBuffer(nProxySetSize);
  190.     if (NULL == lpszProxyString)
  191.         goto Exit0;
  192.     nRetCode = GetIEProxySetString(nProxySetSize, lpszProxyString);
  193.     
  194.     strProxyString.ReleaseBuffer();
  195.     if (nRetCode <= 0)
  196.         goto Exit0;
  197.     
  198.     if (strProxyString.IsEmpty())
  199.         goto Exit0;
  200.     
  201.     strProxyString.MakeLower();
  202.     nPos = strProxyString.Find("socks=");   // SOCKS Proxy (SOCKS5)
  203.     if (-1 == nPos)
  204.         goto Exit0;
  205.     
  206.     strProxyString = strProxyString.Mid(nPos + lstrlen("socks="));
  207.     
  208.     nPos = strProxyString.Find(";");
  209.     if (nPos != -1)
  210.         strProxyString = strProxyString.Left(nPos);
  211.     
  212.     nPos = strProxyString.Find(":");
  213.     strProxyServer = strProxyString.Left(nPos);
  214.     nRetCode = strProxyServer.GetLength();
  215.     if (nRetCode >= nSvrNameSize)
  216.         goto Exit0;
  217.     
  218.     ::lstrcpy(pszProxySvrName, strProxyServer);
  219.     
  220.     if (pnProxyPort != NULL)
  221.         *pnProxyPort = _ttoi(strProxyString.Mid(nPos+1)); 
  222.     
  223.     nResult = true;
  224.     
  225. Exit0:
  226.     return nResult;
  227. }
  228. int IsIEProxyEnable()
  229. {
  230.     int nResult     = -1;     
  231.     LONG lRetCode   = 0;
  232.     HKEY hRegKey    = NULL;
  233.     DWORD dwLength  = 0;
  234.     DWORD dwValue   = 0;
  235.     
  236.     lRetCode = RegOpenKeyEx(
  237.         HKEY_CURRENT_USER,
  238.         g_szRegistryIESettingPath,
  239.         0L,
  240.         KEY_QUERY_VALUE,
  241.         &hRegKey
  242.     );
  243.     if (lRetCode != ERROR_SUCCESS)
  244.         goto Exit0;
  245.     dwLength = sizeof(DWORD);
  246.     lRetCode = RegQueryValueEx(
  247.         hRegKey,
  248.         "ProxyEnable",
  249.         NULL,
  250.         NULL,
  251.         (LPBYTE)&dwValue,
  252.         &dwLength
  253.     );
  254.     if (lRetCode != ERROR_SUCCESS)
  255.         goto Exit0;
  256.     nResult = dwValue;
  257. Exit0:
  258.     return nResult;
  259. }