如何获得网络掩码?

时间:2010-10-22 18:01:33

标签: ruby-on-rails ruby network-programming netmask

我知道如何从ifconfig获取。 (Linux)的 但还有另一种方式吗?可以在插座中找到它。

1 个答案:

答案 0 :(得分:1)

您需要使用IO#ioctl。这完全不便携。在我的linux盒子上这个代码字:

require 'socket'
sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM,0)
buf = ["eth0",""].pack('a16h16')
sock.ioctl(0x891b, buf)
netmask = "#{buf[20]}.#{buf[21]}.#{buf[22]}.#{buf[23]}" #=> "255.255.255.240"

Ioctl在系统之间存在很大差异,我不得不查看一些系统头文件以获得[] .pack的正确大小,buf中地址的位置以及SIOCGIFBRDADDR的数值(ioctl的第一个参数) )。

如果这些值对您不起作用,我可以为您提供有关如何找到它们的更多信息。