0

我知道如何从 ifconfig 获取。(linux)但是还有其他方法吗?可以在套接字中找到它。

4

1 回答 1

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 的第一个参数)。

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

于 2010-10-24T12:57:05.973 回答