|
Posted by DJ Stunks on February 17, 2008, 11:09 am
Please log in for more thread options > 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....
>
> > 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__
>
> 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?
Posted in c.l.p.m:
http://groups.google.com/group/comp.lang.perl.misc/msg/dc432be04691b704?
-jp
|