Je dispose de l'adresse IP d'un poste et de son masque de réseau.
J'aurai besoin de connaître l'ensemble des plages réseau qui compose le
réseau auquel appartient ce poste.
Je m'explique :
Poste : 192.168.1.128
Masque : 255.255.254.0
J'aimerai que mon programme me donne :
192.168.0
192.168.1
Pour se faire, j'ai utilisé use Net::Netmask; mais je pense qu'il doit y
avoir mieux ...
#!/usr/bin/perl -w
use strict;
use Net::Netmask;
my $block = new Net::Netmask ('192.168.1.128', '255.255.254.0');
my (@data)=$block->inaddr();
while ( my ($zone,$start,$end)=splice(@data,0,3) )
{
my (@rz)=split(/\./,$zone);
my (@ipc)=reverse(splice(@rz,0,3));
my $network=join(".",@ipc);
print $network."\n";
}
Code librement inspiré de http://www.perl.com/pub/2002/11/20/dns.html
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Damien Wyart
* ebrnospam in fr.comp.lang.perl:
Je dispose de l'adresse IP d'un poste et de son masque de réseau. J'aurai besoin de connaître l'ensemble des plages réseau qui compose le réseau auquel appartient ce poste.
Je m'explique : Poste : 192.168.1.128 Masque : 255.255.254.0
J'aimerai que mon programme me donne : 192.168.0 192.168.1
Sinon, avec le module Netmask, on peut sans doute utiliser enumerate (qui retourne toutes les adresses, donc c'est potentiellement lourd), et en fonction du masque, calculer manuellement les différents réseaux.
-- DW
* ebrnospam <ebrnospam@free.fr> in fr.comp.lang.perl:
Je dispose de l'adresse IP d'un poste et de son masque de réseau.
J'aurai besoin de connaître l'ensemble des plages réseau qui compose
le réseau auquel appartient ce poste.
Je m'explique :
Poste : 192.168.1.128
Masque : 255.255.254.0
J'aimerai que mon programme me donne :
192.168.0
192.168.1
Je pense que cette fonction doit répondre à la question :
http://search.cpan.org/~mrsam/Net-CIDR-0.16/CIDR.pm#@octet_list=Net::CIDR::cidr2octets(@cidr_list);
Sinon, avec le module Netmask, on peut sans doute utiliser enumerate
(qui retourne toutes les adresses, donc c'est potentiellement lourd), et
en fonction du masque, calculer manuellement les différents réseaux.
Je dispose de l'adresse IP d'un poste et de son masque de réseau. J'aurai besoin de connaître l'ensemble des plages réseau qui compose le réseau auquel appartient ce poste.
Je m'explique : Poste : 192.168.1.128 Masque : 255.255.254.0
J'aimerai que mon programme me donne : 192.168.0 192.168.1
Sinon, avec le module Netmask, on peut sans doute utiliser enumerate (qui retourne toutes les adresses, donc c'est potentiellement lourd), et en fonction du masque, calculer manuellement les différents réseaux.
Je pense que cette fonction doit répondre à la question :
http://search.cpan.org/~mrsam/Net-CIDR-0.16/CIDR.pm#@octet_list=Net::CIDR::cidr2octets(@cidr_list);
Bien sûr, il faudra auparavant utiliser
http://search.cpan.org/~mrsam/Net-CIDR-0.16/CIDR.pm#$cidr=Net::CIDR::addrandmask2cidr($address,_$netmask);
À (at) Tue, 09 Oct 2012 20:45:06 +0200, ebrnospam écrivait (wrote):
Bonsoir à tous,
un petit problème réseau ...
Je dispose de l'adresse IP d'un poste et de son masque de réseau. J'aurai besoin de connaître l'ensemble des plages réseau qui compose le réseau auquel appartient ce poste.
Je m'explique : Poste : 192.168.1.128 Masque : 255.255.254.0
J'aimerai que mon programme me donne : 192.168.0 192.168.1
Cette demande n'a pas vraiment de sens. C'est le masque qui détermine le réseau. Si ce masque contient 23 bits (comme dans votre exemple), votre réseau à une adresse sur 23 bits et 9 bits variables... mais toujours une seule plage !
À (at) Tue, 09 Oct 2012 20:45:06 +0200,
ebrnospam <ebrnospam@free.fr> écrivait (wrote):
Bonsoir à tous,
un petit problème réseau ...
Je dispose de l'adresse IP d'un poste et de son masque de réseau.
J'aurai besoin de connaître l'ensemble des plages réseau qui compose le
réseau auquel appartient ce poste.
Je m'explique :
Poste : 192.168.1.128
Masque : 255.255.254.0
J'aimerai que mon programme me donne :
192.168.0
192.168.1
Cette demande n'a pas vraiment de sens. C'est le masque qui détermine le
réseau. Si ce masque contient 23 bits (comme dans votre exemple), votre
réseau à une adresse sur 23 bits et 9 bits variables... mais toujours
une seule plage !
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
À (at) Tue, 09 Oct 2012 20:45:06 +0200, ebrnospam écrivait (wrote):
Bonsoir à tous,
un petit problème réseau ...
Je dispose de l'adresse IP d'un poste et de son masque de réseau. J'aurai besoin de connaître l'ensemble des plages réseau qui compose le réseau auquel appartient ce poste.
Je m'explique : Poste : 192.168.1.128 Masque : 255.255.254.0
J'aimerai que mon programme me donne : 192.168.0 192.168.1
Cette demande n'a pas vraiment de sens. C'est le masque qui détermine le réseau. Si ce masque contient 23 bits (comme dans votre exemple), votre réseau à une adresse sur 23 bits et 9 bits variables... mais toujours une seule plage !
En effet, après relecture de mon message et de votre message je me rend c ompte que je n'ai pas le masque réseau de la machine mais seulement son @ IP. J'isole donc les 3 premiers octets de l'adresse IP pour la comparer ave c le résultat de la commande précédente.
Bien sûr il me serait possible d'utiliser le module Net::NetMask pour fai re un simple
si @IP dans reseau alors
mais le nombre de réseaux et d'@IP me font pencher pour une solution de d écomposition.
Après je ne suis pas à l'abri d'une erreur d'algorithmique ;-D l'avenir le dira et je serai peut être obligé de prendre la solution juste au d essus.
Cordialement
Eric BERTHOMIER
Le mercredi 10 octobre 2012 01:55:38 UTC+2, Paul Gaborit a écrit :
À (at) Tue, 09 Oct 2012 20:45:06 +0200,
ebrnospam <ebrnospam@free.fr> écrivait (wrote):
> Bonsoir à tous,
>
> un petit problème réseau ...
>
> Je dispose de l'adresse IP d'un poste et de son masque de réseau.
> J'aurai besoin de connaître l'ensemble des plages réseau qui compos e le
> réseau auquel appartient ce poste.
>
> Je m'explique :
> Poste : 192.168.1.128
> Masque : 255.255.254.0
>
> J'aimerai que mon programme me donne :
> 192.168.0
> 192.168.1
Cette demande n'a pas vraiment de sens. C'est le masque qui détermine l e
réseau. Si ce masque contient 23 bits (comme dans votre exemple), votre
réseau à une adresse sur 23 bits et 9 bits variables... mais toujours
une seule plage !
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
En effet, après relecture de mon message et de votre message je me rend c ompte que je n'ai pas le masque réseau de la machine mais seulement son @ IP. J'isole donc les 3 premiers octets de l'adresse IP pour la comparer ave c le résultat de la commande précédente.
Bien sûr il me serait possible d'utiliser le module Net::NetMask pour fai re un simple
si @IP dans reseau alors
mais le nombre de réseaux et d'@IP me font pencher pour une solution de d écomposition.
Après je ne suis pas à l'abri d'une erreur d'algorithmique ;-D l'avenir le dira et je serai peut être obligé de prendre la solution juste au d essus.
En effet, après relecture de mon message et de votre message je me rend c ompte que je n'ai pas le masque réseau de la machine mais seulement son @ IP. J'isole donc les 3 premiers octets de l'adresse IP pour la comparer ave c le résultat de la commande précédente.
Bien sûr il me serait possible d'utiliser le module Net::NetMask pour fai re un simple
si @IP dans reseau alors
mais le nombre de réseaux et d'@IP me font pencher pour une solution de d écomposition.
Après je ne suis pas à l'abri d'une erreur d'algorithmique ;-D l'avenir le dira et je serai peut être obligé de prendre la solution juste au d essus.
Cordialement
Eric BERTHOMIER
Eric BERTHOMIER
Le mardi 9 octobre 2012 21:45:26 UTC+2, Damien Wyart a écrit :
> Je pense que cette fonction doit répondre à la question :