|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
/** Created by Gorlum 25.02.2025 13:16 */ |
|
4
|
|
|
|
|
5
|
|
|
/** |
|
6
|
|
|
* |
|
7
|
|
|
* MySQL: INET_ATON() -> string to int, INET_NTOA() -> int to string |
|
8
|
|
|
* PHP: ip2long -> string to int, long2ip() -> int to string |
|
9
|
|
|
*/ |
|
10
|
|
|
class BanHammer { |
|
11
|
|
|
/** Ban record can be of any expirations */ |
|
12
|
|
|
const EXPIRED_ANY = null; |
|
13
|
|
|
/** Ban record should NOT be active */ |
|
14
|
|
|
const EXPIRED_NOT = false; |
|
15
|
|
|
/** Ban record should ALREADY be expired */ |
|
16
|
|
|
const EXPIRED_ALREADY = true; |
|
17
|
|
|
|
|
18
|
|
|
/** |
|
19
|
|
|
* Get ban records for specified IPv4 address from ban table with appropriate status |
|
20
|
|
|
* |
|
21
|
|
|
* @param int|string $ipV4 IPv4 address to check. Can be ether string like `192.168.1.1` or integer like 3232235777 (int unsigned) |
|
22
|
|
|
* @param ?bool $isExpired |
|
23
|
|
|
* |
|
24
|
|
|
* @return array[]|object[] |
|
25
|
|
|
*/ |
|
26
|
|
|
public static function getByIpV4($ipV4, $isExpired = self::EXPIRED_NOT) { |
|
27
|
|
|
$ipV4 = !is_numeric($ipV4) ? ip2long($ipV4) : (integer)$ipV4; |
|
28
|
|
|
|
|
29
|
|
|
$sqlArray = [ |
|
30
|
|
|
"SELECT *, INET_NTOA(`ipv4_from`) as ipv4_from_string, INET_NTOA(`ipv4_to`) as ipv4_to_string |
|
31
|
|
|
FROM {{ban_ip}} |
|
32
|
|
|
WHERE ipv4_from <= $ipV4 AND ipv4_to >= $ipV4", |
|
33
|
|
|
$isExpired === self::EXPIRED_ANY ? '' |
|
34
|
|
|
: ('AND `expired_at` ' . ($isExpired === self::EXPIRED_NOT ? '>=' : '<') . ' NOW()'), |
|
35
|
|
|
]; |
|
36
|
|
|
|
|
37
|
|
|
return SN::$db->dbGetAll(implode(' ', $sqlArray)); |
|
38
|
|
|
} |
|
39
|
|
|
|
|
40
|
|
|
/** |
|
41
|
|
|
* Check if specified IPv4 address is currently fit specified status |
|
42
|
|
|
* |
|
43
|
|
|
* @param int|string $ipV4 IPv4 address to check. Can be ether string like `192.168.1.1` or integer like 3232235777 (int unsigned) |
|
44
|
|
|
* @param ?bool $isExpired @see BanHammer::EXPIRED_ANY EXPIRED_XXX class constants |
|
45
|
|
|
* |
|
46
|
|
|
* @return bool |
|
47
|
|
|
*/ |
|
48
|
|
|
public static function checkIpV4($ipV4, $isExpired = self::EXPIRED_NOT) { |
|
49
|
|
|
return !empty(static::getByIpV4($ipV4, $isExpired)); |
|
50
|
|
|
} |
|
51
|
|
|
|
|
52
|
|
|
} |
|
53
|
|
|
|