OVH Cloud OVH Cloud

IPToLong, LongToIP?

13 réponses
Avatar
Franck
Salut,

Bonne est heureuse année aux lecteurs de ce groupe ;-)

Je sèche un peu... Romain HELP! ;-)

J'ai une procédure qui me transforme une adresse IP vers un entier
long.
C'est en fait la résultante de l'opération ((a*256+b)*256+c)*256+d.

Exemple: 212.211.210.209 (a.b.c.d) donne 3570651857

Comment faire chemin inverse, à savoir retrouver 212.211.210.209 à
partir de 3570651857?

Merci de votre aide

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

10 réponses

1 2
Avatar
PYT
Franck wrote:
Salut,

Bonne est heureuse année aux lecteurs de ce groupe ;-)

Je sèche un peu... Romain HELP! ;-)

J'ai une procédure qui me transforme une adresse IP vers un entier long.
C'est en fait la résultante de l'opération ((a*256+b)*256+c)*256+d.

Exemple: 212.211.210.209 (a.b.c.d) donne 3570651857

Comment faire chemin inverse, à savoir retrouver 212.211.210.209 à
partir de 3570651857?

Merci de votre aide



Tu retrouveras ton adresse par une série de modulo et de division par 256

a = 3570651857 mod 256
b = PartieEntiere(3570651857/256) mod 256
etc...

PYT
Avatar
Georges Peyre
Bonjour
Meilleurs voeux de santé, de bonheur et de réussite à tous

Franck avait prétendu :
Comment faire chemin inverse, à savoir retrouver 212.211.210.209 à partir de
3570651857?



WDiviseur est un réel = 256
WReste est un tableau de 5 entiers
WResultat est un tableau de 5 réel
I est un entier

WResultat[1] = 3570651857
POUR I = 2 A 5
WResultat[I] = WResultat[I-1] / WDiviseur
WReste[I] = modulo(WResultat[I-1],WDiviseur)
FIN
Info(WReste[5] + "." + WReste[4] + "." + WReste[3] + "." + WReste[2])

et oila !!!

--
Elle est pas belle la vie ?
Avatar
Franck
Franck avait prétendu :

Je sèche un peu... Romain HELP! ;-)



Alors Romain, on cuve? ;-)
Merci à PYT et Georges pour la rapide réponse :-)

Bonne année

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
dd
Vous diviser 3570651857 par 256 = 13947858,81640625
Vous multipliez 0,81640625 par 256 = 209
puis 13947858 div 256 = 54483,8203125
puis 0,8203125 mult par 256 = 210
etc
"Franck" wrote in message
news:
Salut,

Bonne est heureuse année aux lecteurs de ce groupe ;-)

Je sèche un peu... Romain HELP! ;-)

J'ai une procédure qui me transforme une adresse IP vers un entier long.
C'est en fait la résultante de l'opération ((a*256+b)*256+c)*256+d.

Exemple: 212.211.210.209 (a.b.c.d) donne 3570651857

Comment faire chemin inverse, à savoir retrouver 212.211.210.209 à partir
de 3570651857?

Merci de votre aide

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net



Avatar
Romain PETIT
Franck avait prétendu :
Salut,
Bonne est heureuse année aux lecteurs de ce groupe ;-)



Bonjour, de même...

Je sèche un peu... Romain HELP! ;-)
J'ai une procédure qui me transforme une adresse IP vers un entier long.
C'est en fait la résultante de l'opération ((a*256+b)*256+c)*256+d.
Exemple: 212.211.210.209 (a.b.c.d) donne 3570651857
Comment faire chemin inverse, à savoir retrouver 212.211.210.209 à partir de
3570651857?



Les réponses ont déjà été données.
Cependant, j'imagine que tu as dû réinventé la roue : MS nous a fait
des API très simples pour faire ce que tu voulais faire :

// on convertit l'addresse IP en entier 32 bits
elAdresseIPlong est un entier sans signe
elAdresseIPlong = API("wsock32.dll","inet_addr", "212.211.210.209")
//Attention, donne 3520254932 et non 3570651857
//car sous les machines Intel, les octets sont ordonnés de droite à
gauche
//(209.210.211.212) cf
:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/inet_addr_2.asp

//la fonction inverse pour retrouver l'adresse IP (ipv4) à partir du
long
elPointeur est un entier
sAdresseIP est un chaîne ASCIIZ sur 255
elPointeur = API("wsock32.dll","inet_ntoa", elAdresseIPlong)
sAdresseIP=ChaîneRécupère(elPointeur, crAdresseASCIIZ)
Info(sAdresseIP)

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Franck
Romain PETIT a écrit :

Cependant, j'imagine que tu as dû réinventé la roue : MS nous a fait des API



Pour éviter que qqun d'autre réinvente la roue sans API ;-) voilà mes
deux procédures:

FONCTION EntierVersIP(nLongIP est un entier sans signe sur 4 octets)

nA,nB,nC,nD sont des entiers sans signe sur 1 octet

nA = modulo(nLongIP/16777216,256)
nB = modulo(nLongIP/65536,256)
nC = modulo(nLongIP/256,256)
nD = modulo(nLongIP,256)

RENVOYER nA+"."+nB+"."+nC+"."+nD

---

FONCTION IPVersEntier(sIP)

nA,nB,nC,nD sont des entiers sans signe sur 1 octet

SI VérifieExpressionRégulière(sIP,
"([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})",nA,nB,nC,nD)
ALORS
nIP est un entier sans signe sur 4 octets =
((nA*256+nB)*256+nC)*256+nD
RENVOYER nIP
FIN

RENVOYER 0

A+
Et merci pour toutes les réponses.

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
Romain PETIT
Franck avait énoncé :

SI VérifieExpressionRégulière(sIP,
"([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})",nA,nB,nC,nD)



Hum, ça va laisser passer des IP en 999.888.777.555 ça non ?
Il vaut mieux utiliser une regexp du genre :
(([01]?dd?|2[0-4]d|25[0-5]).){3}([01]?dd?|2[0-4]d|25[0-5])

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Gégé
Romain PETIT a écrit :
Hum, ça va laisser passer des IP en 999.888.777.555 ça non ?
Il vaut mieux utiliser une regexp du genre :
(([01]?dd?|2[0-4]d|25[0-5]).){3}([01]?dd?|2[0-4]d|25[0-5])



http://centrewd.free.fr/?page=ficheapi&t=f&n=inet_addr
Avatar
Romain PETIT
Le 03/01/2005, Gégé a supposé :
Romain PETIT a écrit :
Hum, ça va laisser passer des IP en 999.888.777.555 ça non ?
Il vaut mieux utiliser une regexp du genre :
(([01]?dd?|2[0-4]d|25[0-5]).){3}([01]?dd?|2[0-4]d|25[0-5])



http://centrewd.free.fr/?page=ficheapi&t=f&n=inet_addr



Bah oui, mais il veut utiliser ses routines.

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Franck
Romain PETIT a utilisé son clavier pour écrire :
Franck avait énoncé :

SI VérifieExpressionRégulière(sIP,
"([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})",nA,nB,nC,nD)



Hum, ça va laisser passer des IP en 999.888.777.555 ça non ?
Il vaut mieux utiliser une regexp du genre :
(([01]?dd?|2[0-4]d|25[0-5]).){3}([01]?dd?|2[0-4]d|25[0-5])

A+



Bien vu, c'est modifié ;-)

A+

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
1 2