6
votes

Convertir la plage d'adresses IP en deux Bigint pour une recherche plus rapide

Je travaille sur un projet dans lequel nous devons faire Adresse IP Recherche Code>. Ainsi, pour cela, nous avons les jeux de données qui ressembleront à ce qui seront ci-dessous et que les étapes suivantes consistent à remplir ces jeux de données (peut être un fichier CSV) dans la table MySQL code>. Vous trouverez ci-dessous l'exemple de jeu de données contenant des colonnes-

SELECT country
FROM geoip
WHERE
INET_ATON('174.36.207.186') BETWEEN start_ip_num AND end_ip_num
LIMIT 1


10 commentaires

Pourquoi ne pas le stocker comme un entier? Les adresses IPv4 sont garanties pour ne pas dépasser 8 octets.


@Makoto, je dirais que les adresses IPv4 sont garanties d'être 4 octets.


J'ai suscité une suggestion avec IPv4 et 4 octets, mais ... peut-être que c'est bien d'avoir un soutien IPv6 dans une nouvelle application?


Oui, nous pensons également au support IPv6. Si nous décidons d'aller avec IPv6, alors tout doit être changé dans ma table?


@TechGeeky Si vous souhaitez également prendre en charge l'adresse IPv6, alors que la colonne soit une colonne entière de 128 bits. Ensuite, peut-être avoir une autre colonne 1-Char qui spécifie si l'adresse d'adresse représente une adresse IPv4 ou IPv6 afin de pouvoir lancer la valeur qui y est en conséquence.


Je vois. Je vais garder une note de cela. Soutien IPv6 Nous devons faire dans les cas futurs. Pour l'instant, je me concentre principalement sur la manière d'importer au-dessus des jeux de données dans MySQL DB avec start_ip_num et end_ip_num.


@nos, oui, mais comment obtenir start_ip_num et end_ip_num. Je ne peux obtenir que UNIQUE UNIAST BIGINT POUR IPADDRESS, mais comment avoir des gammes de start_ip_num et end_ip_num? Cela me déroule.


@TECHGEEKY Le fichier que vous avez ci-dessus répertorie toutes les adresses IP individuelles et vous souhaitez fusionner des lignes identiques à une seule ligne de la base de données? Par exemple, le fichier contient 123.5.7.2 Houston et 123.5.7.3 Houston comme deux lignes, mais vous souhaitez une seule ligne dans la base de données? Je ne comprends pas complètement votre question donnée à votre commentaire sur ma réponse.


@nos, je viens de mettre à jour ma question avec plus de détails. Faites-moi savoir si toujours ce n'est pas clair. J'ai fait de mon mieux pour fournir tous les détails.


@RLB, je viens de mettre à jour ma question avec plus de détails. Faites-moi savoir si toujours ce n'est pas clair. J'ai fait de mon mieux pour fournir tous les détails.


3 Réponses :


1
votes

Les adresses IPv4 contiennent 4 numéros, chacun d'eux pouvant aller de 0 ... 255

Vous pouvez convertir une adresse ABCD en entiers 32 bits (ou Bigint si vous préférez) avec cette logique P>

Result = (A<<24) | (B<<16) | (C<<8) | D


1 commentaires

Merci mais comment obtenir start_ip_num et end_ip_num. Je ne peux obtenir que la célibataire de l'iPaddress de l'exemple ci-dessus, non? Mais comment avoir des gammes de start_ip_num et de fin_ip_num? Cela me déroule.



0
votes

Vous semblez avoir une sorte de relation difficile entre une iPaddress et son emplacement physique dans le monde. Par exemple, si deux ipadresses étroitement liées sont de New York, toute iPadresse avec une valeur entre ces deux iPadresse devrait également être de New York; Droite?

faux!

La distribution des adresses IP sur le monde est totalement arbitraire et, tandis que les adresses IP sont généralement distribuées en blocs à un pays, district, grand entreprise, etc. Ce qui se passe après cela est plus ou moins arbitraire. Par exemple, les grandes entreprises comme Microsoft et Google ont leurs propres blocs d'adresses IP; Cependant, ce qu'ils font avec elle est totalement arbitraire et ce que Microsoft choisit de faire avec une adresse IP peut être totalement différent de la prochaine ou de l'adresse précédente. Il est même possible qu'une seule adresse IP pointera vers un pays un jour et un autre pays le lendemain, car il y a eu une modification de la topologie du réseau.

Faire une relation entre une adresse IP et son emplacement physique nécessite une base de données très étendue et même dans ce cas, est très sujette aux erreurs et aux changements quotidiens. Même la base de données utilisée par Google est probablement remplie d'erreurs; méprise ses vastes données.


0 commentaires

0
votes

Vous avez des données brutes dans l'adresse IP et vous souhaitez qu'il représente au format de la plage. Voici l'organigramme de la façon dont cela devrait fonctionner.

1) Convertissez toutes les adresses IP au numéro IP 2) Triez le numéro IP ascendant 3) Scannez à travers des enregistrements et comprimez l'enregistrement avec la même ville

Par exemple, IP 1 et IP 2 est en ville X. Vous pouvez le représenter comme 1,2, X.

L'hypothèse ici est que vous avez presque toutes l'adresse IP. S'il y a un écart manquant entre 2 chiffres, vous devez supposer que cela provient de la même ville X. Par exemple, IP 1 et IP 3 est en ville x, vous supposez également IP 2 dans X. 1,3, x.


0 commentaires