Bonjour,

Je suis en train d'écrire un script qui permet de récupérer les infos d'un paquet DHCP en PERL.

J'arrive à récupérer les infos des options telles que DHO_DHCP_MESSAGE_TYPE mais impossible de récupérer les sub option telle que RA_REMOTE_ID ou RA_CIRCUIT_ID de l'option_82 (DHO_DHCP_AGENT_OPTIONS()).


Pour ce faire, j'utilise les module Perl NET::DHCP::Packets.pm et NET::DHCP::Constants, plus particulièrement la fonction getSubOptionRaw.

Voici le script:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl
use IO::Socket::INET;
use Net::DHCP::Packet;
#use Net::DHCP::Constants qw(:DEFAULT %REV_DHCP_MESSAGE);
use Net::DHCP::Constants qw(:DEFAULT %RELAYAGENT_CODES %REV_DHCP_MESSAGE);
#use Data::Dumper;
 
$sock = IO::Socket::INET->new(LocalPort => 67, Proto => "udp", Broadcast => 1)
or die "socket: $@";
 
while ($sock->recv($newmsg, 4096)) {
$packet = Net::DHCP::Packet->new($newmsg);
$agent = $packet->getSubOptionRaw(DHO_DHCP_AGENT_OPTIONS(), RA_REMOTE_ID);
print STDERR $packet->toString();
print "\n\n";
print STDERR $agent;
print "\n\n";
}


Résultat:
Can't use string ("çâÖVPRN1111ddd3a0"...) as a HASH ref while "strict refs" in use at /usr/local/lib/perl5/site_perl/5.16/Net/DHCP/Packet.pm line 555.

Line 555: /usr/local/lib/perl5/site_perl/5.16/Net/DHCP/Packet.pm
sub getSubOptionRaw {
my ( $self, $key, $subkey ) = @_;
return $self->{options}->{$key}->{$subkey}
if exists( $self->{options}->{$key}->{$subkey} );
return;
}

Voici ce que je voudrais afficher:

RA_REMOTE_ID: $ra_remote_id
RA_SUBSCRIBER_ID: $ra_subscriber_id

Comment puis-je faire pour afficher les suboption de l'option 82 ?

Merci d'avance.