• Publicidad

Módulo para direcciones IP

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Módulo para direcciones IP

Notapor juanse_rojas » 2014-11-30 15:12 @675

Hola, la verdad que soy nuevo programando en Perl, ahora estoy haciendo una pequeña aplicación para mi asignatura de programación en Perl que me configure un enrutador.

Anduve buscando algún módulo que permita sumar a una IP valores ejemplo: 10.0.0.1 sumarle 1 y que quede 10.0.0.2 o restarle 1 y quede 10.0.0.0.

Se los agradezco de antemano :D
juanse_rojas
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2014-11-30 10:58 @498

Publicidad

Re: Módulo para direcciones IP

Notapor explorer » 2014-11-30 17:07 @755

He entrado en MetaCPAN y he buscado por "IP" y "Math", y me han salido, entre otros, Net::IP y Net::IPAddress::Util.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Módulo para direcciones IP

Notapor dansamp » 2014-12-03 13:09 @589

Hola, he creado este script.

Ojo, al sumar 1.0.0.255 +1 da resultado 1.0.0.256 (!!)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use Data::Dumper;
  5.  
  6. sub ip_calculator($$){
  7.         my $ip          = shift;
  8.         my $operation   = shift;
  9.         # control operation
  10.         return -1 if $operation !~ m/\d/;
  11.         return -1 if $operation =~ m/[a-zA-Z]/;
  12.         return -1 if $operation !~ m/^\+\d+$/ and
  13.                      $operation !~ m/^-\d+$/  and
  14.                      $operation !~ m/\d+$/;
  15.         # At this point operation is ok
  16.  
  17.         my $type_operation=()?"rest":"add";
  18.         my @octetos = split(/\./,$ip);
  19.  
  20.         ($operation =~ m/^-/) ? &rest($operation,@octetos) : &add($operation,@octetos);
  21.  
  22.         # this can be done using functional programing
  23.         sub add($){
  24.                 my $value = shift;
  25.                 my @octetos = @_;
  26.                 $value =~ s/\+//;
  27.                 return($octetos[0] . "." . $octetos[1] . "." . $octetos[2] . "." . ($octetos[3]+$value));
  28.         }
  29.         sub rest($){
  30.                 my $value = shift;
  31.                 my @octetos = @_;
  32.                 $value =~ s/\-//;
  33.                 return($octetos[0] . "." . $octetos[1] . "." . $octetos[2] . "." . ($octetos[3]-$value));
  34.         }
  35. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Crea una carpeta llamada tests; copia y ejecuta estos tests.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use Test::More 'no_plan';
  5. use lib '../';
  6. use ip_calculator;
  7. ok(&ip_calculator("10.0.0.1","d") eq "-1","operation has NO numbers");
  8. ok(&ip_calculator("10.0.0.1","d1") eq "-1","control of operation 1d");
  9. ok(&ip_calculator("10.0.0.1","") eq "-1","control of operation empty");
  10. # print &ip_calculator("10.0.0.1","1")."\n";
  11. isnt(&ip_calculator("10.0.0.1","1"),"-1","1 vALID add operation");
  12. isnt(&ip_calculator("10.0.0.1","+1"),"-1","+1 vALID add operation");
  13. isnt(&ip_calculator("10.0.0.1","1"),"-1","-1 A vALID rest operation");
  14. ok(&ip_calculator("10.0.0.1","+1") eq "10.0.0.2","sumarle 1 a 10.0.0.1 da 10.0.0.2");
  15. ok(&ip_calculator("10.0.0.1","+100") eq "10.0.0.101","sumarle 1 a 10.0.0.1 da 10.0.0.2");
  16. # print &ip_calculator("10.0.0.1","+1");
  17. ok(&ip_calculator("10.0.0.1","-1") eq "10.0.0.0","Restarle 1 a 10.0.0.1 da 10.0.0.0");
  18. ok(&ip_calculator("10.0.0.101","-100") eq "10.0.0.1","Restarle 100 a 10.0.0.101 da 10.0.0.1");
  19.  
  20. ok(&ip_calculator("10.0.0.255","1") eq "10.0.0.256","ESTO NO DEBERÍA SER ASÍ");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Un placer estar por estos foros.
Última edición por explorer el 2015-11-19 03:50 @202, editado 4 veces en total
Razón: Poner marcasde código Perl
dansamp
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2014-12-02 05:24 @266


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados