• Publicidad

Ejecutable hecho con pp falla

Soporte y ayuda relacionada con el uso de nuestro sitio y su reglamento.

Ejecutable hecho con pp falla

Notapor jlopezn » 2013-09-25 20:03 @877

Hola.

Tengo el siguiente problema, agradeceré cualquier cooperación.

Descripción del entorno:

+ Windows 7 Pro 64
+ StrawberryPerl

Al Perl he agregado los siguientes módulos:

+ Net::DNS
+ PAR::Packer

Tengo un script que al ejecutarlo directamente con perl efectúa la labor sin inconvenientes.

Lamentablemente, después de compilarlo con pp, el ejecutable resultante no actúa tal como al ejecutarlo con Perl.

Este es el script:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!C:\Perl\bin\perl -w
  2. use Net::DNS;
  3. my $res = Net::DNS::Resolver->new;
  4. $res->udp_timeout(5);
  5. my $problems = "";
  6. my $incalol  = 0;
  7. my $listaips = "";
  8. @blacklists = (
  9.     "b.barracudacentral.org",           "bl.spamcop.net",
  10.     "ips.backscatterer.org",            "rhsbl.ahbl.org",
  11.     "backscatter.spameatingmonkey.net", "bl.spameatingmonkey.net",
  12.     "uribl.spameatingmonkey.net",       "urired.spameatingmonkey.net",
  13.     "fresh.spameatingmonkey.net",       "badconf.rhsbl.sorbs.net",
  14.     "new.spam.dnsbl.sorbs.net",         "cbl.abuseat.org",
  15.     "pbl.spamhaus.org"
  16. );
  17. for $arg (@ARGV) {
  18.     $arg =~ m/(\d+)\.(\d+)\.(\d+)\.(\d+)/;
  19.     $arginv = $4 . "." . $3 . "." . $2 . "." . $1;
  20.     $listaips .= " " . $arg;
  21.     for $bl (@blacklists) {
  22.         my $query = $res->search( $arginv . "." . $bl );
  23.  
  24.         if ($query) {
  25.  
  26.             $reason = $res->query( $arginv . "." . $bl, 'TXT' );
  27.             $problems .= "FOUND $arg in " . $bl . "!! (reason: ";
  28.             for $txt ( $reason->answer ) {
  29.                 $problems .= $txt->rdatastr if ( $txt->type eq "TXT" );
  30.             }
  31.             $problems .= ");; ";
  32.             $incalol++;
  33.         }
  34.     }
  35. }
  36. if ( $incalol != 0 ) {
  37.     print $problems. "\n";
  38.     exit 2;
  39. }
  40. print "OK - $listaips checked, is not blacklisted\n";
  41. exit 0;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Utilizo la siguiente instrucción para compilar:

pp -v -o c:\Temp\BL\check_bl.exe c:\Temp\BL\check_bl

Con Perl:

Esta instrucción para ejecutarlo con perl:

perl c:\temp\bl\check_bl 37.215.241.150

Y arroja el siguiente resultado:

FOUND 37.215.241.150 in ips.backscatterer.org!! (reason: "Sorry 37.215.241.150 is blacklisted at http://www.backscattere
r.org/?ip=37.215.241.150");; FOUND 37.215.241.150 in cbl.abuseat.org!! (reason: "Blocked - see http://cbl.abuseat.org/lo
okup.cgi?ip=37.215.241.150");; FOUND 88.165.118.202 in b.barracudacentral.org!! (reason: "http://www.barracudanetworks.c
om/reputation/?pr=1&ip=88.165.118.202");; FOUND 88.165.118.202 in bl.spamcop.net!! (reason: "Blocked - see http://www.sp
amcop.net/bl.shtml?88.165.118.202");; FOUND 88.165.118.202 in new.spam.dnsbl.sorbs.net!! (reason: "Currently Sending Spa
m See: http://www.sorbs.net/lookup.shtml?88.165.118.202");; FOUND 88.165.118.202 in cbl.abuseat.org!! (reason: "Blocked
- see http://cbl.abuseat.org/lookup.cgi?ip=88.165.118.202");;



Al ejecutar el .exe resultado de compilar:

OK - 37.215.241.150 checked, is not blacklisted


La idea es utilizar este ejecutable desde una máquina Windows 32 Bits sin la necesidad de utilizar perl directamente, de ahí la necesidad del ejecutable.

Agradeceré cualquier orientación.

Javier.
Última edición por explorer el 2013-09-26 01:00 @083, editado 1 vez en total
Razón: Formateado de código con Perltidy y poner marcas Perl
jlopezn
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2013-09-25 16:10 @715

Publicidad

Re: Ejecutable hecho con pp falla

Notapor explorer » 2013-09-26 01:18 @096

Bienvenido a los foros de Perl en Español, jlopezn.

El método search() devuelve undef en caso de no obtener respuesta. Por eso no te devuelve ningún dato: no ha conseguido ejecutar Net::DNS::Resolver en ningún caso. El porqué lo hace así, lo desconozco.

Quizás, el Windows 7 está impidiendo el acceso a la red, de ese ejecutable.

Un detalle más: Net::DNS::Resolve depende de unos módulos principales, y según el manual de pp, se puede usar -M para indicar módulos extra que deben ser incluidos. Se supone que pp ya calcula las dependencias por sí mismo, pero a lo mejor algún módulo no lo carga.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ejecutable hecho con pp falla

Notapor jlopezn » 2013-09-26 13:58 @624

Gracias, explorer, por responder tan pronto.

El problema se produce al compilarlo entonces.

Seguí tu consejo y compilé nuevamente, esta vez con la siguiente instrucción:

pp -v -o c:\Temp\BL\check_bl.exe c:\Temp\BL\check_bl -MNet:DNS -MNet:DNS:Resolver

y el ejecutable resultante nuevamente no devuelve el resultado esperado.

Entonces el problema se da al utilizar el resolver compilado puesto que al ejecutarlo con Perl directamente sí funciona.

¿¿¿Alguna idea adicional???

Otra vez, agradezco tu ayuda.
jlopezn
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2013-09-25 16:10 @715

Re: Ejecutable hecho con pp falla

Notapor explorer » 2013-09-26 14:08 @630

Pues... no sé... no uso Windows desde hace muchos años, pero en otros casos, el problema ha venido del cortafuegos de Windows, que impide el acceso externo del ejecutable.

Como tienes las fuentes disponibles, puedes poner print() para saber qué está haciendo, paso a paso.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Ayuda de Perl en Español

¿Quién está conectado?

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