Bonjour,
J'ai créé un script/regex permettant de récupérer des adresses ip et de les ajoutées dans une base.
Je met par exemple le texte suivant dans mon formulaire :
1 2
|
222.344.32.34:4567io bla bla bla avec ce 123.543.566.44:4540 etc |
et cela extrait uniquement les adresses ip.
Script:
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
|
<?php
$filename = "../dbconnect.php";
if (file_exists($filename)) include($filename);
if (isset($_REQUEST['text']) && !empty($_REQUEST['text'])) {
// recupération du texte
$text = $_REQUEST['text'];
}
// extraction ip
if (!empty($text)) {
$res = preg_match_all(
"/[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}/i",
$text,
$matches
);
if ($res) {
foreach(array_unique($matches[0]) as $ip) {
$insertionBase = mysql_query("INSERT IGNORE INTO listeIp (adresseIp, DateInsertion) VALUES ('$ip', now())") or die ('Erreur SQL...veuillez contacter l\'administrateur'.mysql_error());
echo $ip . "<br />";
}
}
else {
echo "Aucune adresse ip trouvée";
}
}
?> |
Cela fonctionne bien...Par contre, maintenant j'aurai souhaité également récupérer le port associé à l'ip.
Il y a 3 situations possibles:
- Soit lorsque je récupère le texte, l'ip est séparée du port par un double point (111.111.111.11:1234)
- soit par un espace (11.111.11.11 2345)
- soit par 2 espacements (12.12.12.12 22)
Est il possible de récupérer le port de la même manière que l'ip?
j ai testé en faisant comme cela:
"/[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}[ : ]?[0-9]{1,5}$/i",
(cela fontionne s'il y a un espace ou un double point, mais avec 2 espaces cela retourne rien)
et
"/[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}[\s\s: ]?[0-9]{1,5}/i",
Dans ce 2eme cas, cela me retourne bien l'ip mais pas le port.
Je remplace les espaces par _ dans mon exemple ci dessous.
Exemple:
Je met 111.111.111.111__33 et cela me retourne 111.111.111.111
Qu'y a t-il comme erreur?
Merci
Partager