Calcul adresse reseau perl
Résolu
kd54
Messages postés
7
Statut
Membre
-
kd54 Messages postés 7 Statut Membre -
kd54 Messages postés 7 Statut Membre -
Bonjour,
je souhaite calculer, dans un script perl, une adresse reseau a partir de mon adresse ip et de mon masque.
Par exemple, si j'ai comme ip 192.168.10.45 et comme masque 255.255.255.0 j'aimerais recuperer dans une variable mon adresse reseau 192.168.10.0 .
Comme faire ?
Merci pour votre aide
je souhaite calculer, dans un script perl, une adresse reseau a partir de mon adresse ip et de mon masque.
Par exemple, si j'ai comme ip 192.168.10.45 et comme masque 255.255.255.0 j'aimerais recuperer dans une variable mon adresse reseau 192.168.10.0 .
Comme faire ?
Merci pour votre aide
Configuration: Solaris Firefox 2.0.0.14
9 réponses
-
Salut,
Je n'ai pas testé.
my $ip=.....; my $m=....; my ($x1,$x2,$x3,$x4)=split /\./,$ip; my ($m1,$m2,$m3,$m4) = split /\./,$m; my $reseau=$x1 & $m1 . "." . $x2 & $m2 . "." . $x3 & $m3 . "." . $x4 & $m4;
autre versionmy $ip=.....; my $m=....; my @ip=split /\./,$ip; my @masque = split /\./,$m; push @reseau,$ip[$_] & $mask[$_] for 1..4; my $reseau=join ".",@reseau;
-
Je te remercie. La premiere partie fonctionne bien.
Par contre, il y a un probleme avec le ET logique. Ca ne fonctionne pas.
Si $x1 = 192 et $m1 = 255, l'operation $x1 & $m1 me renvoie 010
Comment fait-on un "ET Logique" en perl ?? -
Re,
Essaie && -
non plus. J'avais deja essaye... Ca retourne soit 192 pour $x1 && $m1 soit 255 pour $m1 && $x1.
C'est bizar avec un seul & ca devrait fonctionne... -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Re,
Affiche plutôt le script ainsi que l'exécution
N'oublie pas de mettre use strict;use warnings; pour avoir les messages d'erreur/avertissement -
Comment fait-on un "ET Logique" en perl ??
Non, c'est un opérateur 'bit à bit' que tu recherches.
Et il s'agit bien de &.
192 & 255 donne 192
193 & 254 donne 192.
Si ce n'est pas le cas, tu dois faire une erreur quelque part. -
Re,
De toute façon c'est l'opérateur bit à bit qui doit être utiliser, je pense aussi pour une erreur de syntaxe quelque part.
Comme je ne peux pas tester, il sera mieux qu'on vois le script. -
Re,
Ok, j'ai compris pourquoi ça ne marche pas.
Les octets des adresses sont pris pour des chaînes de caractères.
Exemplelami20j@debian:~/trash/ccm_perl$ perl -e 'print "192" & "255","\n"' 010 lami20j@debian:~/trash/ccm_perl$ perl -e 'print 192 & 255,"\n"' 192
Pourquoi?
Puisque le point est l'opérateur de concaténation.
Ce qui fait que 192.168.1.47 deviens une chaine de caractère et l'opérateur & donnera un résultat inattendu.Il suffit de forcer la conversion (j'ai utilise une addition avec zéro).
Vu le contexte 0+192 sera le nombre 192 et pas la chaîne "192".
Bref 0+192 ou 0+"192" donnera toujours un nombre tandis que 0.192 ou 0 . "192" c'est une chaine
Voir en gras.#!/usr/bin/perl use strict;use warnings; my @reseau; my $ip="192.168.1.47"; my $m="255.255.255.0"; my @ip=split /\./,$ip; my @masque = split /\./,$m; push @reseau,0+$ip[$_] & $masque[$_] for 0 .. 3; my $reseau=join ".",@reseau; print "réseau $reseau\n"; __END__ lami20j@debian:~/trash/ccm_perl$ perl ccm_address_reseau.pl réseau 192.168.1.0
-
Merci beaucoup a tous les deux !!
Desole de ne reapparaitre que maintenant mais je n'avais plus d'acces au net.
Encore merci pour votre aide.
salut