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 に答える