Link to home
Start Free TrialLog in
Avatar of shekhar SHEKHAWAT
shekhar SHEKHAWAT

asked on

why i don't receive DHCPDiscover message from server using dongle and why same code give DHCPNac on wifi

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)?
ASKER CERTIFIED SOLUTION
Avatar of gheist
gheist
Flag of Belgium image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial