Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Net::DHCP::Packet - problems recv'ing broadcasted DHCP Offer

39 views
Skip to first unread message

DJ Stunks

unread,
Feb 10, 2008, 8:14:10 PM2/10/08
to
Hi all,

I'm trying to write a DHCP stress tester to mimic thousands of
complete
DHCP transactions (discover, offer, request, ack) and record the
results.

I'm following the example found at

http://search.cpan.org/src/SHADINGER/Net-DHCP-0.66/examples/dhcpd_test.pl.

I'm able to generate and transmit the Discover packet. The DHCP
server
responds with the offer but my $socket->recv($buf,1024); just hangs.

I'm using Linux and I have eth0 set up with a static IP (10.0.0.1).

I believe the socket blocks because it's never receiving any data -
I believe this is because the offer is broadcasted to udp port 68
but the socket is listening on udp://10.0.0.1:68? This is just a
guess.

My code is as follows. Any suggestions would be appreciated.

Thanks,
-jp


#!/usr/bin/perl

use strict;
use warnings;

use IO::Socket::INET;
use Net::DHCP::Packet;
use Net::DHCP::Constants;

use POSIX qw{ strftime };

#open socket for packet tx & rx
my $socket = IO::Socket::INET->new( Proto => 'udp',
Broadcast => 1,
LocalAddr => '10.0.0.1',
LocalPort => 68,
PeerAddr =>
'255.255.255.255',
PeerPort => 67,
) || die "Unable to create socket: $@\n";

my $discover = Net::DHCP::Packet->new(
Xid => int rand(0xFFFFFFFF),
Chaddr => 00011aabbccd,
DHO_DHCP_MESSAGE_TYPE() => DHCPDISCOVER(),
DHO_VENDOR_CLASS_IDENTIFIER() => 'MyVendorClassID',
DHO_DHCP_PARAMETER_REQUEST_LIST() => '1 2 6 12 15 28 67',
);
$discover->addOptionRaw( 61, pack('H*','0100011aabbccd') );

logger("Sending DISCOVER to 255.255.255.255:67");

$socket->send( $discover->serialize() ) or die "Unable to send
Discover:$!\n";

my $buf;
logger("Waiting for response from server");
print $socket->sockhost(), ':', $socket->sockport(), "\n";
$socket->recv($buf, 1024);

logger("Got response");
my $offer = new Net::DHCP::Packet($buf);
logger($offer->toString());

# sample logger
sub logger{
my $str = shift;
print STDOUT strftime "[%d/%b/%Y:%H:%M:%S] ", localtime;
print STDOUT "$str\n";
}

__END__

DJ Stunks

unread,
Feb 16, 2008, 3:23:55 AM2/16/08
to

It's been almost a week and no responses. Do I need to clarify the
question or post this at c.l.p.m? Are there any suggestions I could
try?

Thanks,
-jp

DJ Stunks

unread,
Feb 17, 2008, 11:09:27 AM2/17/08
to
On Feb 16, 1:23 am, DJ Stunks <DJStu...@gmail.com> wrote:
> DJ Stunks wrote:
> > Hi all,
>
> > I'm trying to write a DHCP stress tester to mimic thousands of
> > complete
> > DHCP transactions (discover, offer, request, ack) and record the
> > results.
>
> > I'm following the example found at
>
> >http://search.cpan.org/src/SHADINGER/Net-DHCP-0.66/examples/dhcpd_tes....

Posted in c.l.p.m: http://groups.google.com/group/comp.lang.perl.misc/msg/dc432be04691b704?

-jp


0 new messages