On Friday 02 Jul 2010 06:08:31 mud_saisem wrote:
> Hi,
> 
> I am trying to write a Perl script that will get the ip address of a
> ethernet card using ioctl.
> 
> Could somebody please give me a hand. I am guessing that the section
> where I try to pack my ethernet device is where I am going wrong.
> 
> There is a python script that I found on the internet that works and
> looks as follows:
> ---------------------------------------------------------------------------
> -------------------------------- import socket
> import fcntl
> import struct
> 
> def get_ip_address(ifname):
> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>     return socket.inet_ntoa(fcntl.ioctl(
>         s.fileno(),
>         0x8915,  # SIOCGIFADDR
>         struct.pack('256s', ifname[:15])
>     )[20:24])
> 
> 
> print get_ip_address('eth0')
> 
> 
> 
> 
> I have tried the following with no luck
> ---------------------------------------------------------------------------
> ------ #!/usr/bin/perl
> 
> use Socket;
> require 'sys/ioctl.ph';
> 
> $proto = (getprotobyname('udp'))[2];
> print "getprotp: $proto\n";
> 
> socket(SOCKET, PF_INET, SOCK_DGRAM, $proto) or die "Socket create
> error: $!\n";
> 
> $eth = "eth0";
> $pack = pack("s256", $eth);
> print "pack: $pack\n";
> 
> ioctl(fileno(SOCKET), SIOCGIFADDR, $pack) or die "Error with ioctl: $!
> \n";
> print "ioctl: ", ioctl(fileno(SOCKET), SIOCGIFADDR, $pack), "\n";
> 
> I am getting the following output:
> getprotp: 17
> pack:
> Error with ioctl: Bad file descriptor

Here's a modified version of your script in which I made some progress:

{{{
#!/usr/bin/perl

use strict;
use warnings;

use Socket;
require 'sys/ioctl.ph';

my $proto = (getprotobyname('udp'))[2];
print "getprotp: $proto\n";

my $socket;

socket($socket, PF_INET, SOCK_DGRAM, $proto) or
    die "Socket create error: $!\n";

my $eth = "eth0";
my $pack = pack("a256", $eth);
print "pack: $pack\n";

ioctl($socket, SIOCGIFADDR(), $pack) or die "Error with ioctl: $!
\n";
print "ioctl: ", ioctl($socket, SIOCGIFADDR(), $pack), "\n";
}}}

Regards,

        Shlomi Fish

-- 
-----------------------------------------------------------------
Shlomi Fish       http://www.shlomifish.org/
What Makes Software Apps High Quality -  http://shlom.in/sw-quality

God considered inflicting XSLT as the tenth plague of Egypt, but then
decided against it because he thought it would be too evil.

Please reply to list if it's a mailing list post - http://shlom.in/reply .

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to