2009-05-13 5 views
0

내 Linksys 라우터가 컴퓨터 (PC 및 Mac 및 Linux)에 고정 로컬 IP를 할당하지 않았으므로 매분마다 컴퓨터가 서로 업데이트되도록 스크립트를 작성하고 싶습니다.192.168.1.102와 같은 로컬 IP 주소를보고하는 프로그램 작성 방법은 무엇입니까?

각 시스템에서 http://localhost/list.html

모든 PC 및 Mac과 아파치 서버에 대한 링크 (http://192.168.1.102를 가리키는 등)

가 로컬 IP 주소를 찾을 수있는 방법 모양의 이름 목록을 포함합니다 PC에서 ipconfig를 사용하고 Mac 및 Linux에서 ifconfig를 사용하고 프로그래밍 방식으로 수행하려면 gethostbyname()을 사용합니다.

하지만 루비에 시도, 그

irb(main):001:0> require 'socket' 
=> true 

irb(main):002:0> p Socket::gethostbyname("localhost") 
["Core2Duo", [], 2, "\177\000\000\001"] 

irb(main):005:0> p Socket::gethostbyname("core2duo") 
["Core2Duo", [], 2, "\300\250\001g"] 
=> nil 

및 IPCONFIG 실제로

IPv4 Address. . . . . . . . . . . : 192.168.1.103 

그래서이 그것을 할 올바른 방법입니다

을 보여줍니다? 나는 루비에서 "ipconfig"를 실행하여 해킹 할 수 있으며 정규식을 사용하여 결과를 얻는다. 그러나보다 표준적인 방법으로 그것을 수행하는 것이 좋다.

당신은 사용하여 Java에서이 작업을 수행 할 수 있습니다

답변

2

Socket::getaddrinfo은 당신이 찾고있는 무엇을 더 할 수 있습니다

Socket::getaddrinfo('localhost', 'http') 
[["AF_INET", 80, "localhost", "127.0.0.1", ...]] 

Socket::getaddrinfo('core2duo', 'http') 
[["AF_INET", 80, "Core2Duo", "192.168.1.103", ...]] 

또는, 당신은 시도 할 수 있습니다 :

Socket::getaddrinfo('core2duo', 'http')[0][3] 
"192.168.1.103" 
1

:

Socket s = new Socket(); 
s.getLocalSocketAddress(); 
0

Ruby 스크립트의 문제는 네트워크에 DNS 이름 확인이없는 것일 수 있습니다. 이것은 종종 일반적으로 SMB/CIFS가있는 컴퓨터간에 물건을 공유하는 경우 숨김 상태가됩니다. 이는 이름 확인 프로토콜이기 때문입니다.

1

Windows 시스템에서 Bonjour를 실행하고 Linux 시스템에서 avahi를 실행하는 경우 각 시스템의 IP 주소를 결정하지 않아도됩니다. 그런 다음 "hostname.local"을 사용하여 각 시스템을 간단하게 지정할 수 있습니다. 더 많은 정보 here.

+0

내 넷기어 라우터가 각 컴퓨터에 고정 된 로컬 IP를 할당 할 수는 있지만 ... 링크시스 라우터가 더 안정적이라는 것을 알았습니다. 제 친구는 무선 -n이있는 그의 d-link 라우터가 빠르고 안정적이며 고정 된 로컬 IP를 할당 할 수 있다고 말했습니다. 어쩌면 내가 고려할 것입니다. 케이블 인터넷을 사용하여 속도를 높이고 DSL 인터넷을 사용하여 안정성을 확보하고 다른 라우터를 구입하십시오. –

+0

Bonjour를 사용하면 고정 된 로컬 IP가 필요하지 않습니다. 호스트는 멀티 캐스트 DNS를 사용하여 IP 주소를 서로 알립니다. – sigjuice

+0

Bonjour는 홈 네트워크에 적합합니다. 제한 및 차단으로 인해 회사 네트워크에 좋지 않습니다. – Joshua

1

왜 그 컴퓨터의 DHCP를 끄고 고정 IP 주소를 할당하지 않는 것이 좋을까요?

코멘트 편집 : 적어도 3 년 전 (라우터를 구입 한 마지막)에 Linksys 라우터를 사용하여 내장 DHCP 서버의 맨 아래 IP 주소를 설정할 수있었습니다. 그런 다음 개별 시스템의 네트워크 설정으로 이동하고 DHCP를 비활성화하고 실제 주소를 할당합니다. 예를 들어, 내 홈 네트워크에서 라우터는 192.168.1.1, 테스터레이션은 1.2, 프린터는 1.3, 내 Linux 상자는 1.99, 라우터는 1.100 이상을 제공하도록 구성되어 있습니다.

+0

링크시스 라우터도 그렇게 할 수 있습니까? DHCP를 사용하는 것은 항상 선택 사항이며 추가 이점이 없습니다. –

+0

내 Linksys WRT54G 라우터에서이 작업을 수행 할 수 있습니다. – sigjuice

0

/ip 정보가 들어있는 데이터 그램을 브로드 캐스팅하려면 자신의 IP 주소를 알기 위해 PC가 필요하지 않습니다. 이름이 포함 된 데이터 그램을 보낸 다음 recvfrom() 또는 이와 동등한 것을 사용하여 다른 PC에서 데이터 그램을 잡으십시오. 그렇게하면 수신자는 recvfrom() 기능을 통해 발신자의 IP 주소를 직접 추출 할 수 있습니다.

보너스는 보내는 PC에 둘 이상의 네트워크 어댑터가있는 곳에서 작동해야합니다.