Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Net et Netmask

10 views
Skip to first unread message

ebrnospam

unread,
Oct 9, 2012, 2:45:06 PM10/9/12
to
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."\n";
}

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

Merci

Damien Wyart

unread,
Oct 9, 2012, 3:43:06 PM10/9/12
to
* ebrnospam <ebrn...@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.

--
DW

Damien Wyart

unread,
Oct 9, 2012, 3:45:25 PM10/9/12
to

Paul Gaborit

unread,
Oct 9, 2012, 7:55:38 PM10/9/12
to

À (at) Tue, 09 Oct 2012 20:45:06 +0200,
ebrnospam <ebrn...@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/>

Eric BERTHOMIER

unread,
Oct 10, 2012, 2:22:00 AM10/10/12
to
En effet, après relecture de mon message et de votre message je me rend compte 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 avec le résultat de la commande précédente.

Bien sûr il me serait possible d'utiliser le module Net::NetMask pour faire 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 dessus.

Cordialement

Eric BERTHOMIER

Eric BERTHOMIER

unread,
Oct 10, 2012, 3:36:00 AM10/10/12
to
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
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

unread,
Oct 13, 2012, 8:01:16 AM10/13/12
to
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/

er...@rail.eu.org

unread,
Oct 13, 2012, 12:11:08 PM10/13/12
to
Tonton Th <t...@la.bas.invalid> écrivait :

> 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é
0 new messages