Заявка за редакция на proxy check - добавяне на ф-я за добавяне на IP-та в Whitelist.

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
psycho
Извън линия
Потребител
Потребител
Мнения: 15
Регистриран на: 18 Авг 2018, 20:37
Се отблагодари: 2 пъти
Получена благодарност: 1 път

Заявка за редакция на proxy check - добавяне на ф-я за добавяне на IP-та в Whitelist.

Мнение от psycho » 17 Апр 2019, 20:10

Здравейте, може ли да се направи нещо като списък с изключения за ето този плъгин
-> https://github.com/juicejuicejuice/proxy_check . Примерно в текстов файл да се добавят ип-та, които плъгина да не проверява.
Последно промяна от psycho на 18 Апр 2019, 19:20, променено общо 2 пъти.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Заявка за редакция на proxy check

Мнение от OciXCrom » 18 Апр 2019, 14:12

configs/ProxyCheck.ini - всеки ИП адрес на нов ред.

Код за потвърждение: Избери целия код

/*
	Download and install HTTP:X from: https://forums.alliedmods.net/showthread.php?t=282949
	This plugin is using http://proxy.mind-media.com/block/ service
*/

#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <httpx>

//#define USE_ADDIP_CMD

#define IP_LENGTH 16

#if !defined PLATFORM_MAX_PATH
	#define PLATFORM_MAX_PATH 256
#endif

new g_szDataDir[PLATFORM_MAX_PATH];
new g_hVault = INVALID_HANDLE;
new Trie:g_tAllowed

public plugin_init() {
	register_plugin("Proxy/VPN check", "1.1b", "juice");
	g_tAllowed = TrieCreate();
	ReadFile();
}

public plugin_end()
{
	TrieDestroy(g_tAllowed)
}

ReadFile()
{
	new szFilename[256]
	get_configsdir(szFilename, charsmax(szFilename))
	add(szFilename, charsmax(szFilename), "/ProxyCheck.ini")

	new iFilePointer = fopen(szFilename, "rt")

	if(iFilePointer)
	{
		new szData[32]

		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)

			switch(szData[0])
			{
				case EOS, ';', '#': continue
				default:
				{
					TrieSetCell(g_tAllowed, szData, 1)
				}
			}
		}

		fclose(iFilePointer)
	}
}

public plugin_cfg() {
	g_hVault = nvault_open("proxycheck");

	if(g_hVault == INVALID_HANDLE) {
		set_fail_state("Error opening nVault!");
		return;
	}

	get_localinfo("amxx_datadir", g_szDataDir, charsmax(g_szDataDir));
	add(g_szDataDir, charsmax(g_szDataDir), "/proxycheck");

	if(!dir_exists(g_szDataDir)) {
		mkdir(g_szDataDir);
	}
}

public client_putinserver(id) {
	if(is_user_bot(id) || is_user_hltv(id)) {
		return;
	}

	new szIP[IP_LENGTH];
	get_user_ip(id, szIP, charsmax(szIP), .without_port = 1);

	if(equal(szIP, "loopback") || TrieKeyExists(g_tAllowed, szIP)) {
		return;
	}
	else {
		new szIPcopy[IP_LENGTH];
		copy(szIPcopy, charsmax(szIPcopy), szIP);
		replace_all(szIPcopy, charsmax(szIPcopy), ".", " ");

		new szFields[4][4];
		parse(szIPcopy, szFields[0], charsmax(szFields[]),
			szFields[1], charsmax(szFields[]),
			szFields[2], charsmax(szFields[]),
			szFields[3], charsmax(szFields[]));

		new address = (str_to_num(szFields[0]) << 24) |
			(str_to_num(szFields[1]) << 16) |
			(str_to_num(szFields[2]) << 8) |
			(str_to_num(szFields[3]));

		// Ignore private IPv4 address spaces
		if((address & 0xFF000000) == 0x0A000000 ||	//10.0.0.0/8
		(address & 0xFFF00000) == 0xAC100000 ||		//172.16.0.0/12
		(address & 0xFFFF0000) == 0xC0A80000)		//192.168.0.0/16
		{
			return;
		}
	}

	new data = nvault_get(g_hVault, szIP);

	if(data) {
		if(data == 1) {
			punish_player(id);
		}
		return;
	}

	new szFile[PLATFORM_MAX_PATH];
	formatex(szFile, charsmax(szFile), "%s/check_%s.txt", g_szDataDir, szIP);

	if(!file_exists(szFile)) {
		new szRequest[68];
		formatex(szRequest, charsmax(szRequest), "http://proxy.mind-media.com/block/proxycheck.php?ip=%s", szIP);
		HTTPX_Download(szRequest, szFile, "DownloadComplete", _, _, REQUEST_GET);
	}
}

public DownloadComplete(const download, const error) {
	new szFile[PLATFORM_MAX_PATH];
	HTTPX_GetFilename(download, szFile, charsmax(szFile));

	if(!error) {
		new file = fopen(szFile, "r");

		if(file) {
			new data[2];
			fgets(file, data, charsmax(data));

			if(data[0] == 'Y' || data[0] == 'N') {
				new pos_start = strfind(szFile, "check_", false, strlen(g_szDataDir));
				new pos_end = (pos_start == -1) ? -1 : strfind(szFile, ".txt", false, (pos_start += 6));

				if(pos_end != -1) {
					new szIP[IP_LENGTH];
					add(szIP, charsmax(szIP), szFile[pos_start], pos_end - pos_start);

					if(data[0] == 'Y') {
						new id = find_player("d", szIP);

						if(id) {
							punish_player(id);
						}

						nvault_set(g_hVault, szIP, "1");
					#if defined USE_ADDIP_CMD
						server_cmd("addip 0 %s;wait;writeip", szIP);
					#endif
					}
					else {
						nvault_set(g_hVault, szIP, "2");
					}
				}
			}
			fclose(file);
		}
	}
	delete_file(szFile);
}

punish_player(id) {
	server_cmd("kick #%d ^"Proxy/VPN not Allowed!^"", get_user_userid(id));
}

Аватар
illusion
Извън линия
Developer
Developer
Мнения: 1796
Регистриран на: 27 Ное 2016, 17:47
Местоположение: CraftVision
Се отблагодари: 151 пъти
Получена благодарност: 358 пъти
Обратна връзка:

Заявка за редакция на proxy check

Мнение от illusion » 18 Апр 2019, 15:57

Оправи си заглавието!

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 12 госта