HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. // This plugin requires gRIP module https://dev-cs.ru/resources/650/
  2. #include <amxmodx>
  3. #include <grip>
  4. #include <nvault>
  5.  
  6.  
  7. #if !defined PLATFORM_MAX_PATH
  8. #define PLATFORM_MAX_PATH 256
  9. #endif
  10.  
  11. #if !defined MAX_IP_LENGTH
  12. #define MAX_IP_LENGTH 16
  13. #endif
  14.  
  15. new g_szDataDir[PLATFORM_MAX_PATH];
  16. new g_hVault = INVALID_HANDLE;
  17.  
  18.  
  19. public plugin_init()
  20. {
  21. register_plugin("Proxy Check GRIP", "2.0-grip", "juice/voed")
  22. }
  23.  
  24. public plugin_cfg() {
  25. g_hVault = nvault_open("proxycheck");
  26.  
  27. if(g_hVault == INVALID_HANDLE) {
  28. set_fail_state("Error opening nVault!");
  29. return;
  30. }
  31.  
  32. get_localinfo("amxx_datadir", g_szDataDir, charsmax(g_szDataDir));
  33. add(g_szDataDir, charsmax(g_szDataDir), "/proxycheck");
  34.  
  35. if(!dir_exists(g_szDataDir)) {
  36. mkdir(g_szDataDir);
  37. }
  38. }
  39.  
  40. public client_putinserver(id) {
  41. if(is_user_bot(id) || is_user_hltv(id)) {
  42. return;
  43. }
  44.  
  45. new szIP[MAX_IP_LENGTH];
  46. get_user_ip(id, szIP, charsmax(szIP), .without_port = 1);
  47.  
  48. if(equal(szIP, "loopback")) {
  49. return;
  50. }
  51. else {
  52. new szIPcopy[MAX_IP_LENGTH];
  53. copy(szIPcopy, charsmax(szIPcopy), szIP);
  54. replace_all(szIPcopy, charsmax(szIPcopy), ".", " ");
  55.  
  56. new szFields[4][4];
  57. parse(szIPcopy, szFields[0], charsmax(szFields[]),
  58. szFields[1], charsmax(szFields[]),
  59. szFields[2], charsmax(szFields[]),
  60. szFields[3], charsmax(szFields[]));
  61.  
  62. new address = (str_to_num(szFields[0]) << 24) |
  63. (str_to_num(szFields[1]) << 16) |
  64. (str_to_num(szFields[2]) << 8) |
  65. (str_to_num(szFields[3]));
  66.  
  67. // Ignore private IPv4 address spaces
  68. if((address & 0xFF000000) == 0x0A000000 || //10.0.0.0/8
  69. (address & 0xFFF00000) == 0xAC100000 || //172.16.0.0/12
  70. (address & 0xFFFF0000) == 0xC0A80000 || //192.168.0.0/16
  71. (address & 0xFF000000) == 0x7F000000) //127.0.0.0/8
  72. {
  73. return;
  74. }
  75. }
  76.  
  77. new data = nvault_get(g_hVault, szIP);
  78.  
  79. if(data) {
  80. if(data == 1) {
  81. punish_player(id);
  82. }
  83. return;
  84. }
  85.  
  86. new szFile[PLATFORM_MAX_PATH];
  87. formatex(szFile, charsmax(szFile), "%s/check_%s.txt", g_szDataDir, szIP);
  88.  
  89.  
  90. if(!file_exists(szFile)) {
  91. new szRequest[68];
  92. formatex(szRequest, charsmax(szRequest), "https://ip.teoh.io/api/vpn/%s", szIP);
  93. grip_request(szRequest, Empty_GripBody, GripRequestTypeGet, "HandleRequest");
  94. }
  95. }
  96. public HandleRequest() {
  97. new GripResponseState:responseState = grip_get_response_state();
  98. if (responseState == GripResponseStateError) {
  99. return;
  100. }
  101.  
  102. new GripHTTPStatus:status = grip_get_response_status_code();
  103. if (status != GripHTTPStatusOk) {
  104. return;
  105. }
  106.  
  107. new response[512];
  108. grip_get_response_body_string(response, charsmax(response));
  109.  
  110. new GripJSONValue:data = grip_json_parse_response_body(response, charsmax(response));
  111.  
  112. new szIP[MAX_IP_LENGTH];
  113. grip_json_get_string(grip_json_object_get_value(data, "ip"), szIP, MAX_IP_LENGTH);
  114.  
  115. grip_json_get_string(grip_json_object_get_value(data, "vpn_or_proxy"), response, charsmax(response));
  116. if(equal(response, "yes"))
  117. {
  118. nvault_set(g_hVault, szIP, "1");
  119. new id = find_player("d", szIP);
  120. if(id)
  121. punish_player(id);
  122.  
  123. }
  124. else
  125. {
  126. nvault_set(g_hVault, szIP, "2");
  127. }
  128.  
  129. grip_destroy_json_value(data);
  130. }
  131.  
  132. punish_player(id) {
  133. server_cmd("kick #%d ^"Proxy/VPN nem engedelyezett!^"", get_user_userid(id));
  134. }
  135.