Net et Netmask

Le
ebrnospam
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

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."";
}

Code librement inspiré de http://www.perl.com/pub/2002/11/20/dns.html

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Damien Wyart
Le #24854812
* ebrnospam
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.

--
DW
Damien Wyart
Le #24854802
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);

--
DW
Paul Gaborit
Le #24855172
À (at) Tue, 09 Oct 2012 20:45:06 +0200,
ebrnospam
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 - Perl en français -
Eric BERTHOMIER
Le #24855262
Le mercredi 10 octobre 2012 01:55:38 UTC+2, Paul Gaborit a écrit :
À (at) Tue, 09 Oct 2012 20:45:06 +0200,

ebrnospam


> 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 -
Perl en français -


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 #24855402
Le mardi 9 octobre 2012 21:45:26 UTC+2, Damien Wyart a écrit :
> 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::ad drandmask2cidr($address,_$netmask);



--

DW



Merci bien, pour ceux que ça intéresse ...

#!/usr/bin/perl -w

use strict;
use Net::CIDR; # libnet-cidr-perl

my $address='192.168.1.192';
my $netmask='255.255.254.0';

my $cidr=Net::CIDR::addrandmask2cidr($address, $netmask);

my @octet_list=Net::CIDR::cidr2octets($cidr);
foreach my $reseau (@octet_list)
{
print $reseau."n";
}
Tonton Th
Le #24865542
On 10/10/2012 08:22 AM, Eric BERTHOMIER wrote:

J'isole donc les 3 premiers octets de l'adresse IP



Ce qui présuppose que c'est un /24 ?

--

Nous vivons dans un monde étrange/
http://foo.bar.quux.over-blog.com/
erwan
Le #24866282
Tonton Th
On 10/10/2012 08:22 AM, Eric BERTHOMIER wrote:

J'isole donc les 3 premiers octets de l'adresse IP



Ce qui présuppose que c'est un /24 ?



Ce qui nous ramène à la situation d'avant 1981 où il n'y avait que des
/8...



--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Publicité
Poster une réponse
Anonyme