On Fri, 2007-06-15 at 01:48 +0900, list.rb / gmail.com wrote:
> I spent quite a bit of time last night trying to figure this out to no
> avail.
> 
> Reid, how long did it take you to come up with this? Could anyone
> without C experience figured this out?
> 
> On Jun 13, 9:18 pm, Reid Thompson <Reid.Thomp... / ateb.com> wrote:
> > On Thu, 2007-06-14 at 08:30 +0900, Reid Thompson wrote:
> > > On Thu, 2007-06-14 at 07:45 +0900, wolfram wrote:
> > > > > what operating system? windows/linux(distribution?)/osx?
> > > > > how many network adapters are in the machine?
> >
> > > > Linux.
> >
> > > > > on windows use `ipconfig /all` and parse output or WMI through Win32OLE
> > > > > on unix `/sbin/ifconfig -a`
> >
> > > > I know about the system commands.  Is there a library/API to get these
> > > > programmatically without having to parse output from a sytem command?
> >
> > > > Thanks,
> > > > W.
> >
> > > Create a socket and pull it from the socket structure.
> >
> > see if this works....????
> >
> > rthompso@shienar ~ $ cat getnetmask.rb
> > require 'rubygems'
> > require "inline"
> >
> > class NetMask
> >   inline do |builder|
> >     builder.include '<sys/types.h>'
> >     builder.include '<sys/socket.h>'
> >     builder.include '<sys/ioctl.h>'
> >     builder.include '<netinet/in.h>'
> >     builder.include '<net/if.h>'
> >     builder.c "
> >
> >     char * nmask() {
> >         int fd;
> >         struct ifreq ifr;
> >
> >         fd = socket(AF_INET, SOCK_DGRAM, 0);
> >         ifr.ifr_addr.sa_family = AF_INET;
> >         strncpy(ifr.ifr_name, \"eth0\", IFNAMSIZ-1);
> >         ioctl(fd, SIOCGIFNETMASK, &ifr);
> >         close(fd);
> >
> >         return (char *)inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr);
> >   }"
> >   end
> > end
> >
> > nm = NetMask.new()
> > nmaa = nm.nmask()
> > puts nmaa
> >
> > rthompso@shienar ~ $ ruby getnetmask.rb
> > 255.255.255.0
> 

http://www.hashcode.eti.br/?p=46 makes an interesting read also