[Net::DHCP::Packets]: Sub option_82 (ra_remote_id)
maudor
Messages postés
1
Statut
Membre
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
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
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
1 réponse
-
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 passesDHO_DHCP_AGENT_OPTIONS()
etRA_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 avecDumper()
).
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 utilisaisuse strict;
etuse 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()
etRA_REMOTE_ID
dans Dumper pour voir ce qui ne concorde pas.
Insère aussiuse strict;
etuse warnings;
et déclare tes variables avecmy
.
Dal