2010-10-22 58 views
0

我知道如何從ifconfig中獲得。 (linux) 但是有另一種方法嗎?可以在插座中找到它。如何獲取網絡掩碼?

+0

你的目標操作系統是什麼? – Brian 2010-10-22 18:39:31

+0

linux是我的目標操作系統 – wizztjh 2010-10-23 12:59:41

回答

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的系統之間有很大不同,我不得不期待通過一些系統的頭文件以獲取buf中的地址的[] .pack,位置合適的尺寸和SIOCGIFBRDADDR的數值(ioctl的第一個參數)。

如果這些值不適合你,我可以給你更多關於如何找到它們的信息。

+0

編輯重命名變量 - 它確實是網絡掩碼,而不是廣播;) – SteveRawlinson 2010-10-25 10:42:57