Calcul adresse reseau perl
Résolu
kd54
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
kd54 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
kd54 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- Calcul adresse reseau perl
- Darkino nouvelle adresse - Guide
- Adresse mac - Guide
- Changer adresse dns - Guide
- Adresse url - Guide
- Comment connaître son adresse ip - Guide
9 réponses
Salut,
Je n'ai pas testé.
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 version
my $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 ??
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 ??
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...
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
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.
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.
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.
Exemple
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.
Ok, j'ai compris pourquoi ça ne marche pas.
Les octets des adresses sont pris pour des chaînes de caractères.
Exemple
lami20j@debian:~/trash/ccm_perl$ perl -e 'print "192" & "255","\n"' 010 lami20j@debian:~/trash/ccm_perl$ perl -e 'print 192 & 255,"\n"' 192Pourquoi?
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