I have written a script using perl and i have tested it using two different ways: (1)Using a wifi connection (I have router which is directly connected to server and i am connected to that router). When i run my script on wifi connection, I receive DHCPOffer with IP and when i send request than i receive DHCPNack on that Request. i don't know why ? (2) Using the same code when i connect using a dongle then i even don't receive DHCPDiscover it just kind of hang for about hours and there is no any kind of message from server.

Below is all my code :
use IO::Socket::INET; use Net::DHCP::Packet; use Net::DHCP::Constants; my $result='false'; my $nowtime = localtime(time); print "\nprint $nowtime\n"; SocketCreation(); if ( $result eq 'true') { print "\nTRUE\n"; } else { print "\nFALSE \n"; } #########Here is the finction definition to SocketCreation ########### +################ sub SocketCreation() { my $br_addr = sockaddr_in( '67', inet_aton('255.255.255.255') ); my $xid = int( rand(0xFFFFFFFF) ); #my $chaddr = '00189BF9C1Dp'; my $chaddr = '0016cbb7c882'; my $socket = IO::Socket::INET->new( Proto => 'udp', Broadcast => 1, LocalPort => '68', ) or die "Can't create socket: $@\n"; print "\n please wait and have patience......:\n"; my $discover_packet = Net::DHCP::Packet->new( Xid => $xid, Chaddr => $chaddr, Flags => 0x8000, DHO_DHCP_MESSAGE_TYPE() => DHCPDISCOVER(), DHO_HOST_NAME() => 'Perrr', DHO_VENDOR_CLASS_IDENTIFIER() => 'perlr', ); print "/n just a check\n"; $socket->send( $discover_packet->serialize(), 0, $br_addr) or die "Error sending:$!\n"; my $buf = ''; print "/n just a check2\n"; $socket->recv( $buf, 1024) or die "recvfrom() failed:$!"; #print STDERR $socket->toString(); my $resp = new Net::DHCP::Packet($buf); print "Details:\n" . $resp->toString(); $ip_offerto=$resp->yiaddr(); print "\n IP we got from google is : $ip_offerto\n"; $result = ($ip_offerto =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) ? "t +rue":"false"; print $result; # create DHCP Packet REQUEST $request = Net::DHCP::Packet->new( Xid => 0x12345678, Ciaddr => $resp->yiaddr(), DHO_DHCP_MESSAGE_TYPE() => DHCPREQUEST(), DHO_VENDOR_CLASS_IDENTIFIER() => 'ShekharsIPRequ +est', DHO_DHCP_REQUESTED_ADDRESS() => $resp->yiaddr(), ); print"\nSending REQUEST to server\n"; print $request->toString(); $socket->send($request->serialize(),0,$br_addr) or die "Error sending:$!\n"; print "\nWaiting for response from server\n"; $socket->recv($buf, 4096) || die("recv:$!"); print "\nGot response\n"; $resp = new Net::DHCP::Packet($buf); print STDERR $resp->toString(); close($socket); }
Actually could some one please give me solution for : (1) Why it give DHPCNACK when i use WIfi (through another roter) ? (2) Why the same code hangs while run through dongle (USB Modem internet device)?

In reply to why i don't receive DHCPDiscover message from server using dongle and why same code give DHCPNac on wifi by ppp

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.