Как получить сетевую маску? - PullRequest
0 голосов
/ 22 октября 2010

Я знаю, как получить от ifconfig. (Linux) Но есть ли другой способ? Может нашел его в розетке.

1 Ответ

1 голос
/ 24 октября 2010

Вам нужно использовать 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).

Если эти значения не работают для вас, я могу дать вам больше информации о том, как их найти.

...