Les Forums

Les Forums

Les forums sont fermés. Ils restent présent pour consultation et archivage.
Vous pouvez désormais poser vos questions directement dans les commentaires en bas de chaque page du site.
Alors n'hésitez pas à participer

Optimisation du script Masque.php et fonction pratique

Bonjour tt l'monde !

J'etais par hazard en train de reflechir à des conversions de masques pour faire un script capable d'interroger la base du RIPE (fichier .txt copié en local) pour connaitre la provenance et faire une limitation d'accès à la France/Belgique/Suisse des visiteurs qui postent sur ma shoutbox.

Je propose simplement de remplacer les CASEs par une seule et unique ligne :

$calcul_chaine_mask = (string) long2ip(4294967296 - pow(2, 32 - $calcul_mask));

(4294967296 = 255 * 255 * 255 * 255)

Celle ligne devrais pouvoir rendre service...

Pascal de Serveurperso.com



-------------------------------------------------------------------
Edit : fonction PHP terminée, capable d'utiliser directement base alloclist.txt du RIPE (ftp://ftp.ripe.net/pub/stats/ripencc/membership/alloclist.txt
) qui retourne le netblock, sa date d'enregistrement et son propriétaire. Anti-proxy ideal pour une shoutbox Francophone publique (je limite le fichier alloclist.txt à la France/Belgique/Suisse pour une performance de recherche maximale et grise le formulaire de la shoutbox pour les IPs hors-database).

[code:1:4e33e6badc]

function alloclist($ip) {
$ip = ip2long($ip);
$fichier = "alloclist.txt";
$tableau = file($fichier);
foreach($tableau as $i => $ligne) {
$ligne = trim($ligne);
$pos = strpos($ligne, "ALLOCATED");
if($pos) {
$plage = substr($ligne, 9, $pos - 10);
$pos = strpos($plage, "/");
$reseau = substr($plage, 0, $pos);
$points = substr_count($reseau, ".");
if($points == 0) $reseau .= ".0.0.0";
if($points == 1) $reseau .= ".0.0";
if($points == 2) $reseau .= ".0";
$reseau = ip2long($reseau);
$masque = substr($plage, $pos + 1);
$masque = 4294967296 - pow(2, 32 - $masque);
if(($ip & $masque) == ($reseau & $masque)) {
$masque = long2ip($masque);
$date = substr($ligne, 6, 2)."/".substr($ligne, 4, 2)."/".substr($ligne, 0, 4);
$ripe = "$plage $date $proprietaire";
return $ripe;
}
} else {
if(substr($ligne, 2, 1) == ".") $proprietaire = trim($tableau[$i + 1])." $ligne";
}
}
}

[/code:1:4e33e6badc]
Lu Pascal,

Merci pour l'optimisasion. Je l'ai appliquée dans le script en ligne et j'ai mise à jour l'HTML de publication.

Sur un autre sujet, as tu conscience que :

- Pour les Opérateurs et FAI, les attributions sont effectuées par le RIR de même zone que le demandeur, mais que l'exploitation de ce block (ou partie) peut être dans une autre zone.

- Pour les entreprises WorldWide, tu peux avoir un site à Paris qui surf via un MPLS internationnal et que sa sortie Internet soit au Japon .

C'est juste une remarque, car ce n'est pas répandu, mais c'est tout de même réaliste.

Encore dans un autre débat, est ce que ton script est en ligne ?

@+
_SebF - Sébastien FONTAINE
Salut,

Oui le script fonctionne en ligne [url]http://www.serveurperso.com[/url] depuis mon 1er post au dessus, s'execute en 0.0x seconde et si la plage du visiteur est hors fichier du RIPE au quel j'ai juste (avec un éditeur de texte) retirer les blocs non fr. be. et ch.

Si la plage du visiteur est absente du fichier la shoutbox est en lecture seule : grisage complet du formulaire, affichage de Access Denied 😉 dans la textarea, (+ sécurité côté PHP)

$ripe retourne une chaine type :

BLOC DATE Nom Complet fr.nom

82.224/11 04/11/2003 Proxad, Internet Service Provider in France fr.proxad

Soit toutes les infos comprise dans le fichier du RIPE pour un bloc donné que j'affiche dans le pied du site ou en gardant la souris sur le lien IP d'un visiteur (balise title).

Si un visiteur est hors ripe je peux éventuellement lui ajouter une validation avant de publier le message (mais pour mon "blablateur" c'est le filtrage ultime qui suffit)...

Pascal
Lu Pascal,

C'est cool
_SebF - Sébastien FONTAINE
Merci pour le

2007.07.06 V1.2
- Optimisation du code par Pascal de Serveurperso.com en remplaçant le case par une seule ligne.

🙂
Pascal