| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
Suede WRInaute accro

Inscrit le: 04 Oct 2002 Messages: 3653 Localisation: Suède
|
Posté le : Dim Avr 27, 2003 15:08 Sujet du message: Adresse IP |
|
|
Bonjour
Est-ce que dans les prochaines versions tu comptes mettre plus de deux champs IP? Il faudrait faire une table supplémentaire (id_moteur,adresse) pour pouvoir avoir autant d'adresse que possible.
Je viens de voir d'autre adresse IP Google sur cette page : http://www.iplists.com/new/
Quelqu'un les a déjà vue dans ses logs?
François |
|
| |
|
 |
WebRankInfo Administrateur du site

Inscrit le: 19 Avr 2002 Messages: 14035 Localisation: Toulouse
|
Posté le : Dim Avr 27, 2003 15:42 Sujet du message: Adresse IP |
|
|
ça semble étonnant, certaines de ces adresses appartiennent à Fujitsu
dans les prochaines versions il faudrait pouvoir donner pour chaque robot une liste de "ranges", par exemple 216.239.32.0 - 216.239.63.255 pour Google
si qqn a une idée pour organiser ça simplement dans des tables MySQL mais surtout dans le formulaire de définition de robot, je suis preneur |
|
| |
|
 |
Suede WRInaute accro

Inscrit le: 04 Oct 2002 Messages: 3653 Localisation: Suède
|
Posté le : Dim Avr 27, 2003 15:57 Sujet du message: Adresse IP |
|
|
| WebRankInfo a écrit: |
ça semble étonnant, certaines de ces adresses appartiennent à Fujitsu
dans les prochaines versions il faudrait pouvoir donner pour chaque robot une liste de "ranges", par exemple 216.239.32.0 - 216.239.63.255 pour Google
si qqn a une idée pour organiser ça simplement dans des tables MySQL mais surtout dans le formulaire de définition de robot, je suis preneur |
Oui, sans doute. Ils ont aussi les mauvaises adresses pour surfnomore spider.
Pour les plages, il faudrait peut-etre stocker une IP modifié dans tes tavles : 216299032000 à la place de 216.239.32.0 afin de pouvoir faire des opérations mathématiques dessus.
Si tu as une table id_moteur, range_min, range_max
Cela te permet de selectionner simplement le moteur dans la requete MySQL.
Pour le formulaire, peut-etre une boite de texte. Il suffit de passer à la ligne pour chaque nouvelle plage.
Ou bien une insertion en deux étapes: 1) info moteur 2) détection moteur et là, tu peux avoir un formulaire ou tu ajoutes tes plages une par une.
François |
|
| |
|
 |
WebRankInfo Administrateur du site

Inscrit le: 19 Avr 2002 Messages: 14035 Localisation: Toulouse
|
Posté le : Dim Avr 27, 2003 16:04 Sujet du message: Adresse IP |
|
|
oui pour le formulaire je pensais plutot à ta 2eme solution
en fait on définirait un robot en 2 étapes :
1/ comme maintenant = tout sauf les plages d'adresses IP
2/ associer une ou plusieurs plages à un robot sélectionné dans une liste |
|
| |
|
 |
ortolojf WRInaute passionné

Inscrit le: 14 Aoû 2002 Messages: 804 Localisation: Paris
|
Posté le : Dim Avr 27, 2003 18:52 Sujet du message: Adresse IP |
|
|
Problème
Tu sélectionnes d'après l'adresse IP, ou le range d'adresse IP, ce qui signifie que tu devrais pouvoir sélectionner rapidement l' enregistrement de la table des ranges d'adresses IP des robots, d'après une adresse IP référence ( celle du visiteur ).
Sous quelle forme ces ranges d'adresse IP devraient-ils figurer dans cette table ?
Si l'on veut transformer une adresse IP en entier, celà donne 4*(65536 ** 2) possibilités, un peu plus de 4 milliards, à supposer que nous restions à la version TCP/IP V4.
Le problème est qu'il faut pouvoir comparer deux adresses IP d'une manière simple, et que l'indexation de ces valeurs d'adresses IP, soit possible.
Si l'indexation n'est pas possible, la table sera parcourue séquentiellement en entier à chaque visite, ce qui ralentit beaucoup le processus.
Bien à toi.
Jean Francois Ortolo |
|
| |
|
 |
WebRankInfo Administrateur du site

Inscrit le: 19 Avr 2002 Messages: 14035 Localisation: Toulouse
|
Posté le : Dim Avr 27, 2003 19:00 Sujet du message: Adresse IP |
|
|
je parle de plages d'adresses et non pas de listes d'adresses
ce qui signifie que pour un robot donné, les tests consisteraient simplement à vérifier si l'adresse IP du visiteur fait partie d'une plage d'adresses d'un des robots définis dans GoogleStats
ça ne me semble donc pas un pb en terme d'indexation ou de vitesse ? |
|
| |
|
 |
Suede WRInaute accro

Inscrit le: 04 Oct 2002 Messages: 3653 Localisation: Suède
|
Posté le : Dim Avr 27, 2003 19:45 Sujet du message: Adresse IP |
|
|
A mon avis, ce n'est pas un probleme
Si le robot 5 a entre autre la plage d'adresse 255.200.60.32 - 255.200.62.125
on aura
(id,range_min,range_max)
5 , 255200060032, 255200062125
et si on a l'adresse 255.200.61.122, elle sera repéré par la requete:
select id from table where range_min <= 255200061122 and range_max >= 255200061122 (ou un truc de ce genre)
Cela ne devrait pas risquer de ralentir trop.
François |
|
| |
|
 |
ortolojf WRInaute passionné

Inscrit le: 14 Aoû 2002 Messages: 804 Localisation: Paris
|
Posté le : Lun Avr 28, 2003 9:05 Sujet du message: Adresse IP |
|
|
Bonjour
Je suis tout à fait d'accord avec Suede, mais un nombre composé de 12 chiffres, c'est quand même plus élevé que 4 milliards.
Et le langage PHP n'admet pas d'entiers au dessus de 4 giga.
A mon avis, il faudrait avoir un champ pour chaque séquence de deux composantes 0-255, ce qui nous fait deux champs pour une adresse IP en TCP/IP V4, et 3 champs pour une adresse IP en TCP/IP V6, si je crois que les adresses IP en TCP/IP V6, comportent 6 composantes 0-255.
Pour chaque ensemble de deux composantes 0-255 contenues par exemple dans l'array ip_address[2], on aurait le champ correspondant à cet ensemble, serait égal à:
(256 * ip_address[0]) + ip_address[1]
Après, pour les comparaisons, on est obligé de tenir compte des cas d'égalité stricte entre les ensembles, et le critère serait donc:
Supposons qu'en TCP/IP V4 nous ayons une adresse minimale array $min[4] contenant les 4 composantes 0-255, facilement déductibles de l'adresse IP correspondante $address_min, avec un $min = explode(".", $address_min);
Et la même chose avec l'adresse maximale du range des adresses $max = explode(".", $address_max);
On suppose que $address_min <= $address_max.
Soit $adresse l'adresse du visiteur, et on calcule
$ip_address = explode(".", $adresse);.
// Pour infos, mais $rang_min[0]
// et $rang_min[1] sont les deux champs
// de l'adresse minimale, enregistrés
// dans la table $TABLE_ROBOTS.
// Même chose pour $rang_max
$range_min[0] = (256 * $min[0]) + $min[1];
$range_min[1] = (256 * $min[2]) + $min[3];
$range-max[0] = (256 * $max[0]) + $max[1];
$range_max[1] = (256 * $max[2]) + $max[3];
// On calcule les ensembles de composantes
// pour l'adresse IP du visiteur
$range_address = (256 * $ip_address[0]) + $ip_address[1];
$range_address = (256 * $ip_address[2]) + $ip_address[3];
// Et le critère d'appartenance au range
// des adresses IP, serait:
WHERE (($ip_address[0]>$range_min[0])||
(($ip_address[0]==$range_min[0])&&
($ip_address[1]>=$range_min[1]))&&
(($ip_address[0]<$range_max[0])||
(($ip_address[0]==$range_max[0])&&
($ip_address[1]<=$range_max[1]));
Et pour les index, on prend comme champs entre autres les 4 valeurs $rang_min[0], $rang_min[1], $rang_max[0] et
$rang_max[1], qui définissent le range d'adresses
du robot correspondant.
Evidemment, pour TCP/IP V6,
il est nécéssaire de changer d'implémentation, mais
rien ne nous empêche de prévoir déjà
cette option, en rajoutant deux champs supplémentaires
à la table $TABLE_ROBOTS, et de faire
un traitement spécifique de sélection, en fonction
d'une variable de configuration.
Bien à vous.
Jean Francois Ortolo |
|
| |
|
 |
ortolojf WRInaute passionné

Inscrit le: 14 Aoû 2002 Messages: 804 Localisation: Paris
|
Posté le : Lun Avr 28, 2003 9:09 Sujet du message: Adresse IP |
|
|
Excusez-moi
J'ai fait un typo.
Dans la clause WHERE que j'ai indiquée, remplacer
$ip_address[n] par $range_adress[n]
pour tout n.
Merci.
Je suis pressé, faut que je prenne mon bain.
Bien à vous.
Jean Francois Ortolo |
|
| |
|
 |
Suede WRInaute accro

Inscrit le: 04 Oct 2002 Messages: 3653 Localisation: Suède
|
Posté le : Lun Avr 28, 2003 11:59 Sujet du message: Adresse IP |
|
|
Juste une question bête d'un néophite en ce qui concerne l'info.
Est ce qu'en condant dans une autre base, type hexa, cela est plus facile pour php?
François |
|
| |
|
 |
ortolojf WRInaute passionné

Inscrit le: 14 Aoû 2002 Messages: 804 Localisation: Paris
|
Posté le : Lun Avr 28, 2003 21:03 Sujet du message: Adresse IP |
|
|
Béééé
Un entier, pour le coder, il faut des bits ( 0 ou 1 ).
Un octet est un nombre décimal pouvant aller de 0 à 255.
En hexadécimal, un octet va de 00 à FF, ce qui, du point de vue des valeurs numériques, est strictement la même chose qu'en décimal.
Si tu veux un entier composé de 4 valeurs pouvant aller de 0 à 255, celà te donnera un entier pouvant aller de 0 à (256 ** 4) - 1 ou aussi de 0 à (65536 ** 2) - 1. ( Les deux sont équivalents ).
Le problème est que pour la comparaison d'adresses IP, il faut des entiers, car si on transforme en double, ce ne sera plus un entier, et il ne sera plus possible de tester l'égalité entre deux valeurs de type double.
Donc, la solution que j'ai sugérée, pour apparemment complexe qu'elle soit, me paraît la plus adaptée.
D'un autre côté, le fait qu'une adresse IP soit définie par ses composantes (0 - 255), permet le passage facile à TCP/IP V6 , il suffit de prévoir le nombre de champs suffisant, pour définir une adresse IP.
La raison pour laquelle je préconise d'avoir des champs dans la table $TABLE_ROBOTS , qui aillent de 0 à 65535 , est qu'il est plus simple algorithmiquement de traiter des ensembles de valeurs ayant moins de composantes.
En effet, une adresse IP mémorisée de cette manière, n'aura que 2 composantes en TCP/IP V4 , comme je l'ai montré dans mon précédent message.
En gros, la réponse à ta question, c'est: le format hexadécimal n'est qu'une convention de représentation d'une valeur entière, mais ne change rien à sa valeur exprimée en bits ( 8 bits = 1 octet ).
Bien à toi.
Jean Francois Ortolo
|
|
| |
|
 |
Suede WRInaute accro

Inscrit le: 04 Oct 2002 Messages: 3653 Localisation: Suède
|
Posté le : Lun Avr 28, 2003 21:58 Sujet du message: Adresse IP |
|
|
J'avais bien dit question bête de néophite  |
|
| |
|
 |
champignac WRInaute discret

Inscrit le: 13 Déc 2002 Messages: 55
|
Posté le : Dim Juil 13, 2003 17:11 Sujet du message: Adresse IP |
|
|
Juste une precision a propos de la taille des entiers dans php ils font bien 4 octets ce qui permet de faire tenir une pv4, le seule pb est que ces entier sont signe qu'a cela ne tienne:
il suffit pour l'utiliser dans une requete sql de l'afficher en non signe :
sprintf("%u",ip2long($ip)), ensuite les tratment de comparasion peuvent avoir lieu dans mysql. et voila  |
|
| |
|
 |
ortolojf WRInaute passionné

Inscrit le: 14 Aoû 2002 Messages: 804 Localisation: Paris
|
Posté le : Dim Juil 13, 2003 19:16 Sujet du message: Adresse IP |
|
|
Ah.
Et les fonctions de comparaison numérique de PHP vont très certainement interpréter l'entier long théoriquement non signé, en entier long signé, puisque tu dis que c'est le seul type d'entier long supporté par PHP.
Au risque de me faire prendre pour un fou d'informatique, et têtu en plus, je veux souligner que ma solution, nonobstant son apparente ( mais pas réelle ) complexité, a le grand avantage de l'extensibilité très facile à des formats d'adresses IP plus conséquents, comme TCP/IP V6, qui sera prochainement la norme sur Internet.
Qu'y a-t-il de plus beau que de faire un programme, dont on sait qu'il restera compatible avec les standards du futur, au prix simplement du changement de valeur d'une variable de configuration ?
...Faut prévoir, dans la vie.
Bien à toi.
Jean Francois Ortolo
|
|
| |
|
 |
ortolojf WRInaute passionné

Inscrit le: 14 Aoû 2002 Messages: 804 Localisation: Paris
|
Posté le : Dim Juil 13, 2003 20:58 Sujet du message: Adresse IP |
|
|
Last but not least...
Mon petit bout de script que j'avais mis quelques post plus haut, a un gros lapsus.
Il faut remplacer les opérateurs de PHP, par les opérateurs du langage SQL.
Donc: || par: OR
et: && par: AND
Et puis, si SQL supporte pas les variables indicées, faut affecter d'abord des variables simples avec les variables indicées, puis effectuer la clause SELECT ... WHERE avec les variables simples.
A part ça et l'autre remplacement déjà mentionné dans mon précédent post, tout baigne dans l'huile.
Avec mon script, plus un choix entre TCP/IP V4 et TCP/IP V6, donc nombre de variables comparées ad hoc, ce choix dépendant d'une variable de configuration simple à modifier sur tout le package, genre: TCP_IP_VERSION=4 ou 6, vous avez un bon exemple d'implémentation qui résistera même à la grêle... et avec la rapidité proverbiale de l'index.
Bien à vous.
Jean Francois Ortolo
|
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
|
|