Cara menggunakan php regex ip address

Bagaimana cara menggunakan bash regex untuk mendapatkan ip address dari string log seperti ini

2020-01-11 09:45:15 login authenticator failed for (User) [46.38.144.202]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:15 login authenticator failed for (User) [46.38.144.64]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:15 login authenticator failed for (User) [46.38.144.124]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:15 login authenticator failed for (User) [46.38.144.202]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:16 login authenticator failed for (User) [46.38.144.57]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:18 login authenticator failed for (User) [46.38.144.57]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:18 login authenticator failed for (User) [46.38.144.231]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:18 login authenticator failed for (User) [46.38.144.247]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:19 login authenticator failed for (User) [46.38.144.146]: 535 Incorrect authentication data (set_id=)
2020-01-11 09:45:20 login authenticator failed for (User) [46.38.144.64]: 535 Incorrect authentication data (set_id=)

Hasil yang ingin didapatkan adalah ip addressnya saja, maka anda bisa menggunakan kode berikut ini :

tail -n 10 /var/log/exim/mainlog | grep 'login authenticator failed' | awk '{print $8'} | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'

Hasil yang didapatkan adalah

46.38.144.117
46.38.144.64
46.38.144.231
46.38.144.124
46.38.144.17
46.38.144.247
46.38.144.79
46.38.144.17
46.38.144.202
46.38.144.179

dari hasil tersebut apabila ada yang duplikat kita bisa menggunakan uniq

tail -n 10 /var/log/exim/mainlog | grep 'login authenticator failed' | awk '{print $8'} | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}' | uniq

Demikian selamat berkreasi

Sumber :

Pages in this namespace:

No pages in this namespace.

Layanan

Harga Domain .COM | Harga Domain .ID | Shared Hosting | Email Hosting | MySQL Hosting |

wekekekek....

Cara menggunakan php regex ip address

bedanya ama punya saya apaan yah?

@Pak Skay_v13,
ini sekedar info buat belajar regex :

- \d dan [0-9] itu ekivalen, lebih praktis nulis yg \d, di engine-nya kayanya jg lebih cepet yg \d, soalnya built-in, regex gak perlu baca pattern [0-9],
tapi cuma bisa di PCRE (preg_*()), POSSIX gak bisa (ereg*())...

- eregi & preg_match() lebih cepet yg preg_match

- dr hasil filtering eregi tersebut 999.999.999.999 jg dianggap valid,
tapi masih ada filter lapis kedua yg pake explode() buat cek range-nya
(sama jg ama yg saya bilang ke Pak Pangsit)

- eregi itu case insensitive, artinya gak membedakan huruf besar / kecil,
tapi yg dihadapin ini "cuma angka", jd gak perlu case insensitive

-edit-
- sebenernya ada yg lebih pendek,
$valid_ip = preg_match('#^(\d{1,3}\.){3}\d{1,3}$#',$isian_form);
tapi gak saya sarankan juga, soalnya antara bentuk "loop" / perulangan dengan yg dijabarkan,
umumnya lebih cepat yg dijabarkan, jadi selama gak terlalu panjang sebaiknya ya dijabarkan saja...

- atau modifikasi dr model-nya Pak Pangsit,
$valid_ip = preg_match('#^((25[0-5]|(2[0-4]|1\d|[1-9])?\d)\.){3}(25[0-5]|(2[0-4]|1\d|[1-9])?\d)$#',$isian_form);
yg ini gak perlu di-explode() lagi...

jadi kalo ditulis fungsi utuhnya,
model saya :


<?php
function checkValidIp($ip){
if(preg_match('#^(\d{1,3}\.){3}\d{1,3}$#',$ip)) {

$tmp = explode(".", $ip);
foreach($tmp AS $sub) if($sub>255) return FALSE;
return TRUE;
}
else return FALSE;
}

$ip = "12.4.6.4";
$val = checkValidIp($ip);
if(!$val){
echo "IP is not valid";
} else {
echo "IP is valid";
}
?>


model Pak Pangsit :


<?php
function checkValidIp($ip){
return preg_match('#^((25[0-5]|(2[0-4]|1\d|[1-9])?\d)\.){3}(25[0-5]|(2[0-4]|1\d|[1-9])?\d)$#',$ip) ? TRUE : FALSE;
}

$ip = "12.4.6.4";
$val = checkValidIp($ip);
if(!$val){
echo "IP is not valid";
} else {
echo "IP is valid";
}
?>


btw, yg ini koreksi :
- baris : $sub = $sub * 1; kayanya gak perlu

- baris : if($sub<0 || $sub>256) $return = FALSE;
coba pak $ip diisi 256.256.256.256, pasti dibilang "IP is valid" padahal mestinya tidak,
$sub>256 , mestinya $sub>255
$sub<0 ||, juga gak perlu, soalnya begitu lolos dr eregi() angka paling kecil yg diterima 0, gak mungkin lebih kecil dr itu...

- HTH & CMIIW -
maaf kalo pertanyaan sebelumnya gak saya jawab, soalnya males menerangkan detil ttg pattern regex

Cara menggunakan php regex ip address