2010-03-16 3 views

답변

8

는, 소켓 번호의의 getifaddrs 사용할 수 :

001:0> require 'socket' 
=> true 
002:0> Socket.getifaddrs.map { |i| i.addr.ip_address if i.addr.ipv4? }.compact 
=> ["127.0.0.1", "192.168.1.121", "192.168.1.181"] 
1
나는 루비는 이것에 대한 표준 API를 가지고 있지만 몇 가지 가정 하에서이 플랫폼에 걸쳐 매우 신뢰할 수 있어야 생각하지 않는다

: 여기

require 'socket' 
Socket::getaddrinfo(Socket.gethostname, 'echo', Socket::AF_INET).map { |x| x[3] } 

우리는 로컬 호스트 이름을 갖는 기계처럼 꽤 몇 가지를 가정합니다 올바른 IP 주소를 가리키고 있습니다. 따라서, 이것은 완전히 신뢰할만한 것은 아니지만 플랫폼에 독립적이며 공통 설정에서 작동합니다.

편집 : ifconfig를 구문 분석하기로 결정한 경우, ruby-ifconfig을 포크하는 것을 고려하십시오. 그것은 대부분의 비 Windows 플랫폼에서 이미 그렇게한다고 주장합니다.

+0

"_service_ 서비스 이름입니다 ("HTTP ","ssh를 ", ...), 또는 포트 번호 (80, 22, ...) ", 그래서 : echo => 'echo' – andrykonchin

+1

호스트 이름 요구 사항이 나를 죽입니다. 4 개의 인터페이스가있는 컴퓨터에서 ["127.0.0.1 ","127.0.0.1 "] – Tindron

+0

Ummm ... 당신은 서버 측을 쓰고있는 도구입니까? snmp를 옵션으로 사용하고 있습니까? – anshul

2

체크 아웃 다음 게시물 :

코멘트에 게시 된 솔루션 anshul에 대한 논의도있다

http://coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/

. 루비 2.1 이후

+1

각 인터페이스에 연결할 IP 주소를 알고있는 경우 그 방법이 효과적입니다. 불행히도 나는 그것을 추측 할 수 없다 .. 댓글에 따라 Ruby에는 API가 없으므로 ifconfig/ipconfig라고 생각합니다. – Tindron

관련 문제