Advertisement
Guest User

proxy_check.sma

a guest
Apr 22nd, 2019
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.06 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <nvault>
  4. #include <httpx>
  5.  
  6. //#define USE_ADDIP_CMD
  7.  
  8. #define IP_LENGTH 16
  9.  
  10. #if !defined PLATFORM_MAX_PATH
  11.     #define PLATFORM_MAX_PATH 256
  12. #endif
  13.  
  14. new g_szDataDir[PLATFORM_MAX_PATH];
  15. new g_hVault = INVALID_HANDLE;
  16.  
  17. public plugin_init()
  18. {
  19.     register_plugin("Proxy/VPN check", "2", "s7amb370");
  20.     register_concmd("proxy_acceptip", "cmdAcceptIP", ADMIN_LEVEL_S, "<ip_address>")
  21.     register_concmd("proxy_denyip", "cmdDenyIP", ADMIN_LEVEL_S, "<ip_address>")
  22. }
  23.  
  24. public cmdDenyIP(id, level, cid)
  25. {
  26.   if (!cmd_access(id, level, cid, 2))
  27.     return PLUGIN_HANDLED
  28.  
  29.   new szIP[32];
  30.   read_argv(1, szIP, charsmax(szIP))
  31.  
  32.   #if defined USE_ADDIP_CMD
  33.   new data = nvault_get(g_hVault, szIP);
  34.   if(data && data == 2)
  35.   {
  36.         server_cmd("addip ^"%s^";writeip", szIp)
  37.     console_print(id, "[ProxyCheck] %s was added to banlist.", szIP);
  38.   }
  39.   #endif
  40.   console_print(id, "[ProxyCheck] %s is now blacklisted.", szIP);
  41.   nvault_set(g_hVault, szIP, "1");
  42.  
  43.   return PLUGIN_HANDLED;
  44. }
  45. public cmdAcceptIP(id, level, cid)
  46. {
  47.   if (!cmd_access(id, level, cid, 2))
  48.     return PLUGIN_HANDLED
  49.  
  50.   new szIP[32];
  51.   read_argv(1, szIP, charsmax(szIP))
  52.  
  53.   #if defined USE_ADDIP_CMD
  54.   new data = nvault_get(g_hVault, szIP);
  55.   if(data && data == 1)
  56.   {
  57.         server_cmd("removeip ^"%s^";writeip", szIp)
  58.     console_print(id, "[ProxyCheck] %s was removed from banlist.", szIP);
  59.   }
  60.   #endif
  61.   console_print(id, "[ProxyCheck] %s is now whitelisted.", szIP);
  62.   nvault_set(g_hVault, szIP, "2");
  63.  
  64.   return PLUGIN_HANDLED;
  65. }
  66.  
  67. public plugin_cfg() {
  68.     g_hVault = nvault_open("proxycheck");
  69.  
  70.     if(g_hVault == INVALID_HANDLE) {
  71.         set_fail_state("Error opening nVault!");
  72.         return;
  73.     }
  74.  
  75.     get_localinfo("amxx_datadir", g_szDataDir, charsmax(g_szDataDir));
  76.     add(g_szDataDir, charsmax(g_szDataDir), "/proxycheck");
  77.  
  78.     if(!dir_exists(g_szDataDir)) {
  79.         mkdir(g_szDataDir);
  80.     }
  81. }
  82.  
  83. public client_putinserver(id) {
  84.     if(is_user_bot(id) || is_user_hltv(id)) {
  85.         return;
  86.     }
  87.  
  88.     new szIP[IP_LENGTH];
  89.     get_user_ip(id, szIP, charsmax(szIP), .without_port = 1);
  90.  
  91.     if(equal(szIP, "loopback")) {
  92.         return;
  93.     }
  94.     else {
  95.         new szIPcopy[IP_LENGTH];
  96.         copy(szIPcopy, charsmax(szIPcopy), szIP);
  97.         replace_all(szIPcopy, charsmax(szIPcopy), ".", " ");
  98.  
  99.         new szFields[4][4];
  100.         parse(szIPcopy, szFields[0], charsmax(szFields[]),
  101.             szFields[1], charsmax(szFields[]),
  102.             szFields[2], charsmax(szFields[]),
  103.             szFields[3], charsmax(szFields[]));
  104.  
  105.         new address = (str_to_num(szFields[0]) << 24) |
  106.             (str_to_num(szFields[1]) << 16) |
  107.             (str_to_num(szFields[2]) << 8) |
  108.             (str_to_num(szFields[3]));
  109.  
  110.         // Ignore private IPv4 address spaces
  111.         if((address & 0xFF000000) == 0x0A000000 ||    //10.0.0.0/8
  112.         (address & 0xFFF00000) == 0xAC100000 ||        //172.16.0.0/12
  113.         (address & 0xFFFF0000) == 0xC0A80000)        //192.168.0.0/16
  114.         {
  115.             return;
  116.         }
  117.     }
  118.  
  119.     new data = nvault_get(g_hVault, szIP);
  120.  
  121.     if(data) {
  122.         if(data == 1) {
  123.             punish_player(id);
  124.         }
  125.         return;
  126.     }
  127.  
  128.     new szFile[PLATFORM_MAX_PATH];
  129.     formatex(szFile, charsmax(szFile), "%s/check_%s.txt", g_szDataDir, szIP);
  130.  
  131.     if(!file_exists(szFile)) {
  132.         new szRequest[68];
  133.         formatex(szRequest, charsmax(szRequest), "http://proxy.mind-media.com/block/proxycheck.php?ip=%s", szIP);
  134.         HTTPX_Download(szRequest, szFile, "DownloadComplete", _, _, REQUEST_GET);
  135.     }
  136. }
  137.  
  138. public DownloadComplete(const download, const error) {
  139.     new szFile[PLATFORM_MAX_PATH];
  140.     HTTPX_GetFilename(download, szFile, charsmax(szFile));
  141.  
  142.     if(!error) {
  143.         new file = fopen(szFile, "r");
  144.  
  145.         if(file) {
  146.             new data[2];
  147.             fgets(file, data, charsmax(data));
  148.  
  149.             if(data[0] == 'Y' || data[0] == 'N') {
  150.                 new pos_start = strfind(szFile, "check_", false, strlen(g_szDataDir));
  151.                 new pos_end = (pos_start == -1) ? -1 : strfind(szFile, ".txt", false, (pos_start += 6));
  152.  
  153.                 if(pos_end != -1) {
  154.                     new szIP[IP_LENGTH];
  155.                     add(szIP, charsmax(szIP), szFile[pos_start], pos_end - pos_start);
  156.  
  157.                     if(data[0] == 'Y') {
  158.                         new id = find_player("d", szIP);
  159.  
  160.                         if(id) {
  161.                             punish_player(id);
  162.                         }
  163.  
  164.                         nvault_set(g_hVault, szIP, "1");
  165.                     #if defined USE_ADDIP_CMD
  166.                         server_cmd("addip 0 %s;wait;writeip", szIP);
  167.                     #endif
  168.                     }
  169.                     else {
  170.                         nvault_set(g_hVault, szIP, "2");
  171.                     }
  172.                 }
  173.             }
  174.             fclose(file);
  175.         }
  176.     }
  177.     delete_file(szFile);
  178. }
  179.  
  180. punish_player(id) {
  181.     server_cmd("kick #%d ^"Proxy&VPN not Allowed Here!^"", get_user_userid(id));
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement