[Net::DHCP::Packets]: Sub option_82 (ra_remote_id)

Fermé
maudor Messages postés 1 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 12 avril 2016 - Modifié par maudor le 12/04/2016 à 15:55
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 13 avril 2016 à 15:34
Bonjour,

J'aimerais créer un sniffer DHCP en perl (Net::DHCP::Packets et Net::DHCP::Constants) pour récupérer les sub option comme l'option_82 comme le "RA_REMOTE_ID".

J'ai essayé en utilisant la sub "getSubOptionRaw" sans succès. J'ai trouvé aucune documentation dessus qui m'aiderait à utiliser cette sub.

Voici le script:

#!/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";
}

Result:

Can't use string ("çâÖVPRN6221fcc3a0"...) 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;
}

paquet DHCP reçu :

Exemple:

op = BOOTREQUEST
htype = HTYPE_ETHER
hlen = 6
hops = 0
xid = 7a0b90b
secs = 0
flags = 0
ciaddr = 0.0.0.0
yiaddr = 0.0.0.0
siaddr = 0.0.0.0
giaddr = x.x.x.x
chaddr = xxxxxxxx
sname =
file =
Options :
DHO_DHCP_MESSAGE_TYPE(53) = DHCPDISCOVER
DHO_DHCP_PARAMETER_REQUEST_LIST(55) = 121 1 3 6 12 15 28
DHO_DHCP_AGENT_OPTIONS(82) = \x01\x04\x00\x00\x00\x15\x02\x06\x00\x10\xE7\xE2\xD6\xC4\x97\x08\x00VDD001\x061fcc3a0a07241e58493f3c335e9fc1eb3@xxxxxxxxxx
padding [1] = 00
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 13/04/2016 à 15:36
Salut maudor,

Je n'ai jamais utilisé ce module et je n'ai jamais fait ce que tu essayes de faire.

Cependant, le message d'erreur se manifeste sur la ligne
$self->{options}->{$key}->{$subkey}
car ce que tu passes en arguments de getSubOptionRaw ne correspond pas à une/des référence(s) de hash valides dans la branche options de la structure de données de l'objet créé.

Tu passes
DHO_DHCP_AGENT_OPTIONS()
et
RA_REMOTE_ID
...

Le premier est un appel à une fonction, et j'imagine qu'elle retourne une référence valide existante dans
$packet
(vérifie avec
Dumper()
).

Par contre, je ne comprends pas le deuxième : RA_REMOTE_ID, c'est un "mot nu" qui ne devrait pas être permis en Perl.

Si tu utilisais
use strict;
et
use warnings;
tu aurais un message d'erreur dès la compilation.

Si c'est une sous clef valide du hash, il faudrait écrire
'RA_REMOTE_ID'


Passe
$packet
,
DHO_DHCP_AGENT_OPTIONS()
et
RA_REMOTE_ID
dans Dumper pour voir ce qui ne concorde pas.

Insère aussi
use strict;
et
use warnings;
et déclare tes variables avec
my
.


Dal
0