2009-11-02 3 views
3

Хорошее время суток.Mac + Ruby: Не удается получить доступ к разъему Socket? Как исправить?

рубин Код:

def hw_address(iface) 
    sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM,0) 

    buf = [iface,""].pack('a16h16') 
    sock.ioctl(SIOCGIFHWADDR, buf); 

    sock.close 

    return buf[18..24].to_etheraddr 
end 

puts hw_address('lo0') 

Что делать: получает MAC-адрес интерфейса.

Работы на Debian, как ожидалось. Но на Mac OS X, им получать сообщение об ошибке: `` IOCTL ': Операция не поддерживается сокет (Errno :: EOPNOTSUPP) `

Есть в любом случае, чтобы исправить/передать это сообщение об ошибке & получить работу ioctl на сокеты?

+2

Откуда вы получаете определение SIOCGIFHWADDR? На моем Mac это, похоже, не определено даже в файлах заголовков системы - в sockio.h есть SIOCGLIFADDR, который, похоже, делает то же самое (но я не знаю, как получить доступ к этому из ruby). – SteveRawlinson

+0

Спасибо, получил его из источников freebsd. –

ответ

0

http://hintsforums.macworld.com/showthread.php?t=97909

«После функции [s] не доступны в Mac OS X:

1) POSIX Таймер Библиотека (-librt Real Time) 2) IOCTL с командой SIOCGIFHWADDR - Чтобы получить Mac Адрес сетевого интерфейса. "

C'est la vie.

+0

Спасибо за 2 года + 26 дней ответ :) –

+0

Рассматривая это еще позже, как я вспоминаю, у меня был тот же вопрос, нашел ответ и вернулся к нему, чтобы его документировать. –