Passage d'ip courte a ip longue et vice versa

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 319 fois - Téléchargée 29 fois

Contenu du snippet

ce code permet de passer d'une ip de la forme "1362556172" a "81.54.245.12" et vice versa. C'etais deja possible avant grace a $longip() mais ce code permet de savoir comment ça fonctionne ,c'est un peu mathematique mais on s'y retrouve

Source / Exemple :


alias lngip { 
  if ( %valeur-lng = $null ) {
    set %itr 1
    while ( %itr <= 4 ) {
      set %valeur-lng %valeur-lng $longip($left($str(0.,$calc(%itr - 1)) $+ 1. $+ $str(0.,$calc(4 - %itr)),7))
      ;ici on trouve les valeurs pour lesquelles on doit multiplier chake tokken de l'ip pour obtenir l'ip longue
      ;une division euclidienne avec ces valeur redonne l'adresse ip de depart
      inc %itr
    }
  }
  set %itr 1
  set %reste $1
  unset %ip
  while ( %itr <= 4 ) {
    if ( $1 !isnum) { 
      set %ip $calc(%ip + $gettok(%valeur-lng,%itr,32) * $gettok($1,%itr,46))
      ;ici on travaille un format du style 81.51.245.31
      ;on multiplier chaque tokken par une puissance de 2 et on additionne au fur et a mesure
      ;pour le premier c 2^24 ensuite 2^16 apres 2^8 et en dernier 2^0
    }
    else {
      set %ip %ip $+ . $+ $int($calc(%reste / $gettok(%valeur-lng,%itr,32)))
      set %reste $calc(%reste - $gettok(%valeur-lng,%itr,32) * $int($calc(%reste / $gettok(%valeur-lng,%itr,32))))
      ;ici on travaille sur un format long 1362556172 
      ;pour les amateurs on a ici une division Euclidiene
      ;les quatre diviseurs sont les puissances de 2 presentées plus haut
    }
    inc %itr
  }
  if ( $1 isnum) { set %ip $right(%ip,$calc($len(%ip) - 1)) }
  return %ip
  ;ici on renvoi l'adresse ip quelque soit son format
}

Conclusion :


ya un bug que je n'arrive pas a regler , l'alias ne fonctione sur les ip 255.255.255.255 et 255.255.255.254
sinon il marche sur toutes les autres adresses ip quelque soi leur format

pour l'utiliser faite
//echo -a $lngip(adressip)

mais ça fait la meme chose ke $longip(adressip)
c'est juste pour montrer comment ça marche

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
mardi 26 septembre 2006
Statut
Membre
Dernière intervention
26 septembre 2006

y a que le début je voudrais savoir comment ca marche je suis nul en math
Messages postés
10
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
15 décembre 2005

dc moi je debute la je comprend pas trop votre TrUc, jve juste savoir parceke jvoudrais mettre un truc ds mon script pr ke le numero la ki appararait ds les WHOIS ca soit ke des numero genre 256.696 etc au lieu de 5695522663.fr alros s kelkin peut maider ca serait gentil ou je pourrais me renseigner car la c du charabiat pr Moi, mici davance=)
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005

mignon rien a dire c un excelent travail. j'aime ta façon de voir les choses.
Mais ma vision du code c'etait plus la devision euclidienne que le calcul en base faut dire que quand g bosé cette source gt a fond sur les nombres premiers

exelente suggestion encore merci
Messages postés
17
Date d'inscription
lundi 25 novembre 2002
Statut
Membre
Dernière intervention
18 janvier 2006

Auteur XiNeOs, c'est plus simple non ?

; $courtip(longip) - $courtip(1369884524)
alias courtip {
var %lip $base($1,10,16), %i 1, %r

; %lip contient la valeur hexa de l'ip longue, on prend les caractères 2 par 2
; puis on reconverti chaque valeur en décimal
while (%i <= $len(%lip)) {
%r = $addtok(%r,$base($mid(%lip,%i,2),16,10),46)
inc %i 2
}
return %r
}
Messages postés
15
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
13 janvier 2004

ralalal le emilien qui sla pete parckil est ircop... ON S'EN FOU! kerrigan je savais pas trop c'etait quoi une division eclidienne mais grace a ton code g compris MERCI bcp jvais dormir moins con ce soir, mais cela dit toi aussi tu triche un peu en utilisan $longip... enfin BREF continu comme ça
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.