Deel van IP-adres blokkeren
maar nu zijn er handige mensen bij die heel veel ip adressen gebruiken in dezelfde range nu wil ik alleen
de eerste 5 a 6 chars gebruiken van de ip om te blokken het script doet nu alleen het hele ip checken.
weet iemand hoe ik dit voorelkaar kan krijgen ?
zie onder dit is het probleem wil dus 005.101 blocken
2018-08-10 02:06:24 5.101.221.37
2018-08-10 02:07:28 5.101.221.91
2018-08-10 02:08:03 5.101.221.83
2018-08-10 02:08:51 5.101.221.52
2018-08-10 02:09:24 5.101.221.34
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
protected function check_payout_time($ip_address){
$this->ip_address = $this->DB->escape_string($ip_address);
$interval = "7 HOUR"; // hardcoded default interval if the custom interval is messed up
$interval_value = intval(substr($this->SETTINGS->config["payout_interval"],0,-1));
$interval_function = strtoupper(substr($this->SETTINGS->config["payout_interval"],-1));
if ($interval_value >= 0 && ($interval_function == "H" || $interval_function == "M" || $interval_function == "D")) {
$interval = $interval_value." ";
switch ($interval_function) {
case "M":
$interval .= "MINUTE";
break;
case "H":
$interval .= "HOUR";
break;
case "D":
$interval .= "DAY";
break;
}
}
$user_check = " AND (";
if ($this->SETTINGS->config["user_check"] == "ip_address" || $this->SETTINGS->config["user_check"] == "both") {
$user_check .= " `ip_address` = '". $this->ip_address ."'";
}
if ($this->SETTINGS->config["user_check"] == "wallet_address" || $this->SETTINGS->config["user_check"] == "both") {
$user_check .= ($this->SETTINGS->config["user_check"] == "both"?" OR":"")." `payout_address` = '". $this->payout_address ."'";
}
$user_check .= ")";
$query = sprintf("SELECT `id` FROM `%spayouts` WHERE `timestamp` > NOW() - INTERVAL %s",
$this->DB->TB_PRFX,
$interval.$user_check);
$result = $this->DB->query($query);
if ($row = @$result->fetch_assoc()) {
// user already received a payout within the payout interval
$this->status = SF_STATUS_PAYOUT_DENIED;
return false;
}
else {
// All is good, payment will be given
return true;
}
}
?>
protected function check_payout_time($ip_address){
$this->ip_address = $this->DB->escape_string($ip_address);
$interval = "7 HOUR"; // hardcoded default interval if the custom interval is messed up
$interval_value = intval(substr($this->SETTINGS->config["payout_interval"],0,-1));
$interval_function = strtoupper(substr($this->SETTINGS->config["payout_interval"],-1));
if ($interval_value >= 0 && ($interval_function == "H" || $interval_function == "M" || $interval_function == "D")) {
$interval = $interval_value." ";
switch ($interval_function) {
case "M":
$interval .= "MINUTE";
break;
case "H":
$interval .= "HOUR";
break;
case "D":
$interval .= "DAY";
break;
}
}
$user_check = " AND (";
if ($this->SETTINGS->config["user_check"] == "ip_address" || $this->SETTINGS->config["user_check"] == "both") {
$user_check .= " `ip_address` = '". $this->ip_address ."'";
}
if ($this->SETTINGS->config["user_check"] == "wallet_address" || $this->SETTINGS->config["user_check"] == "both") {
$user_check .= ($this->SETTINGS->config["user_check"] == "both"?" OR":"")." `payout_address` = '". $this->payout_address ."'";
}
$user_check .= ")";
$query = sprintf("SELECT `id` FROM `%spayouts` WHERE `timestamp` > NOW() - INTERVAL %s",
$this->DB->TB_PRFX,
$interval.$user_check);
$result = $this->DB->query($query);
if ($row = @$result->fetch_assoc()) {
// user already received a payout within the payout interval
$this->status = SF_STATUS_PAYOUT_DENIED;
return false;
}
else {
// All is good, payment will be given
return true;
}
}
?>
Gewijzigd op 11/08/2018 02:36:44 door - Ariën -
Wat je zoekt is volgens mij (regel 25):
Code (php)
1
$user_check .= " `ip_address` LIKE '". preg_replace('/(\\.\\d+){2}$/','.%',$this->ip_address) ."'";
Hiermee vervang je de laatste twee cijferblokken door een ".%", waardoor je een LIKE kunt doen op het eerste deel. Let op: werkt dus alleen met IPv4 adressen.
Ik hoop ook dat e.e.a. in een transactie staat, zodat het controleren en uitbetalen ook echt één ondeelbare actie is :p. En ja, misschien ook een idee om alles ook IPv6 compatible te maken.
Rob Doemaarwat op 11/08/2018 09:24:57:
Let op: Gebruikers met de zelfde provider zitten vaak in dezelfde IP-reeks (maar zijn dus verschillende gebruikers). Mobiele klanten kunnen soms zelfs hetzelfde IP-adres delen (Carrier-grade NAT). Zo'n IP (reeks) check is dus niet waterdicht.
Wat je zoekt is volgens mij (regel 25):
Hiermee vervang je de laatste twee cijferblokken door een ".%", waardoor je een LIKE kunt doen op het eerste deel. Let op: werkt dus alleen met IPv4 adressen.
Wat je zoekt is volgens mij (regel 25):
Code (php)
1
$user_check .= " `ip_address` LIKE '". preg_replace('/(\\.\\d+){2}$/','.%',$this->ip_address) ."'";
Hiermee vervang je de laatste twee cijferblokken door een ".%", waardoor je een LIKE kunt doen op het eerste deel. Let op: werkt dus alleen met IPv4 adressen.
heb het veranderd ben benieuwd als dit de oplossing is ben ik u reuze dankbaar
nu even alles in de gaten houden !!
Toevoeging op 11/08/2018 13:07:18:
- Ariën - op 11/08/2018 02:33:37:
dit is niet wat ik zoek. tor exit nodes wel worden al geblockt doormiddel van een php script.
Toevoeging op 11/08/2018 13:08:25:
Thomas van den Heuvel op 11/08/2018 11:57:03:
Ik hoop ook dat e.e.a. in een transactie staat, zodat het controleren en uitbetalen ook echt één ondeelbare actie is :p. En ja, misschien ook een idee om alles ook IPv6 compatible te maken.
heb ipv6 disabled. veel te veel werk :-)
Toevoeging op 11/08/2018 23:55:29:
Rob van rhee op 11/08/2018 13:05:07:
heb het veranderd ben benieuwd als dit de oplossing is ben ik u reuze dankbaar
nu even alles in de gaten houden !!
*** bedankt dit is wat ik zocht !! het werkt perfect !!!!!!
Toevoeging op 11/08/2018 13:07:18:
dit is niet wat ik zoek. tor exit nodes wel worden al geblockt doormiddel van een php script.
Toevoeging op 11/08/2018 13:08:25:
heb ipv6 disabled. veel te veel werk :-)
Rob Doemaarwat op 11/08/2018 09:24:57:
Let op: Gebruikers met de zelfde provider zitten vaak in dezelfde IP-reeks (maar zijn dus verschillende gebruikers). Mobiele klanten kunnen soms zelfs hetzelfde IP-adres delen (Carrier-grade NAT). Zo'n IP (reeks) check is dus niet waterdicht.
Wat je zoekt is volgens mij (regel 25):
Hiermee vervang je de laatste twee cijferblokken door een ".%", waardoor je een LIKE kunt doen op het eerste deel. Let op: werkt dus alleen met IPv4 adressen.
Wat je zoekt is volgens mij (regel 25):
Code (php)
1
$user_check .= " `ip_address` LIKE '". preg_replace('/(\\.\\d+){2}$/','.%',$this->ip_address) ."'";
Hiermee vervang je de laatste twee cijferblokken door een ".%", waardoor je een LIKE kunt doen op het eerste deel. Let op: werkt dus alleen met IPv4 adressen.
heb het veranderd ben benieuwd als dit de oplossing is ben ik u reuze dankbaar
nu even alles in de gaten houden !!
*** bedankt dit is wat ik zocht !! het werkt perfect !!!!!!
Toevoeging op 11/08/2018 13:07:18:
- Ariën - op 11/08/2018 02:33:37:
dit is niet wat ik zoek. tor exit nodes wel worden al geblockt doormiddel van een php script.
Toevoeging op 11/08/2018 13:08:25:
Thomas van den Heuvel op 11/08/2018 11:57:03:
Ik hoop ook dat e.e.a. in een transactie staat, zodat het controleren en uitbetalen ook echt één ondeelbare actie is :p. En ja, misschien ook een idee om alles ook IPv6 compatible te maken.
heb ipv6 disabled. veel te veel werk :-)