Estoy trabajando con sockets UDP y por ellos estoy recibiendo paquetes SNMP.
Necesito analizar estos paquetes para saber cuál es el IP/puerto de origen del paquete que llegó al host.
Tengo el mensaje en la variable $newmsg que acabo de recuperar del socket y este es el código con el que estoy probando:
Using perl Syntax Highlighting
...
use NetPacket::Ethernet qw(:strip);
use NetPacket::IP;
use NetPacket::UDP;
...
my $ip_datagram = NetPacket::IP->decode( NetPacket::Ethernet::eth_strip( $newmsg ) );
foreach ( keys %$ip_datagram ) { print "$_|$ip_datagram->{$_}\n"; }
...
use NetPacket::Ethernet qw(:strip);
use NetPacket::IP;
use NetPacket::UDP;
...
my $ip_datagram = NetPacket::IP->decode( NetPacket::Ethernet::eth_strip( $newmsg ) );
foreach ( keys %$ip_datagram ) { print "$_|$ip_datagram->{$_}\n"; }
...
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Ahora, cuando ejecuto y envío un mensaje desde otro host, mi código imprime esto:
- len|1094
dest_ip|16.6.12.43
options|
ttl|1
src_ip|0.48.18.48
tos|2
id|49598
Use of uninitialized value in concatenation (.) or string at ./snmp_agent.pl line 163.
_parent|
hlen|0
proto|0
foffset|59408
flags|2
ver|2
cksum|513
...
(data y _frame no los puse porque muestran caracteres "no imprimibles", pero no es problema pues la data snmp ya la estoy recuperando con NSNMP).
Mi problema es que los campos src_ip y dest_ip están teniendo valores que sé que son incorrectos (porque reviso el paquete recibido con tshark por otro lado).
He visto varios códigos escritos en Perl que utilizan NetPacket y claramente estoy haciendo algo mal o me falta algo antes de hacer la llamada a decode, pero no sé qué es. Ahora, también recibo sugerencias respecto de usar módulos distintos a NetPacket o funciones de IO::Socket que aún no descubro
Agradeceré mucho su ayuda.
Saludos.