Вам нужно использовать 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).
Если эти значения не работают для вас, я могу дать вам больше информации о том, как их найти.