2011-02-01 2 views
0

이 질문은 만족스러운 해결 방법을 찾지 못했던 Given a Uri value how can one check whether it refers the local machine?과 관련이 있습니다.단일 네트워크 쿼리없이 로컬 Windows 상자의 모든 IP 주소와 호스트 이름을 찾는 방법은 무엇입니까?

필요가 간단합니다. 네트워크 왕복을하지 않고도 로컬 컴퓨터의 호스트 이름과 IP 주소 (여러 네트워크 카드가있는 경우 둘 이상일 수 있음)와 로컬 컴퓨터의 호스트 이름을 찾고 싶습니다. 로컬 테이블에 나타나는 정보 만 의미하며 DNS 쿼리는 없습니다. BTW, 도메인 이름도 발견되어야합니다.

다시 생각

, 나는 다음과 같은 방법으로 수행 할 수 있습니다

IP, 호스트 이름 또는 호스트 + 도메인 이름을 허용하고 주소는 true 반환
bool IsLocalAddress(string address); 

로컬 컴퓨터를 의미합니다. 다시 한번, 여러 NIC와 도메인을 고려하십시오.

미리 감사드립니다.

P.

나는 C# 코드 샘플을 선호합니다. 당신이 할 수있는 파이썬을 사용하여

+0

DNS를 가져 오면 모든 배팅이 해제됩니다. 기계는 등록 된 모든 DNS 항목을 알 수 없습니다. –

+0

맞지만 컴퓨터 자체에 로컬 캐시가 있어야합니다. 이 캐시를 검사 할 수 있는지 궁금합니다. – mark

답변

0

:

import socket 
socket.gethostname() # hostname 
socket.gethostbyname(gethostname()) # host ip addr 

윈도우 API 같은 이름의 두 가지 기능을하므로, 어떠한 언어가 유사한 코드를 사용할 수 있습니다 포함 쇼를 인터넷 검색의 비트.

Windows 특정 코드를 작성하는 경우 WMI 클래스를 사용해야합니다. 예를 들어 Win32_NetworkAdapterConfiguration은 인터페이스 당 여러 개의 인터페이스와 여러 개의 IP 주소에 대한 정보를 제공합니다.

+0

여러 NIC의 질문에 어떻게 대답합니까? 시스템에 둘 이상의 네트워크 카드가있는 경우 호스트 이름이 두 개 이상인 IP 주소가 두 개 이상 있습니다. – mark

1

흥미로운 표본이 here입니다.

+0

+1 링크입니다. 그러나 네트워크 쿼리없이 주어진 IP를 각 호스트 이름으로 변환 할 수 있습니까? IP는 로컬이기 때문에 내가 있어야한다고 생각합니다. 그러나 확실하지 않습니다. 또한 도메인 문제가 있습니다. 주소는 host + domain이 될 수 있으며 여전히 로컬 시스템을 참조 할 수 있습니다. – mark

+0

발견 된 .NET 동등한 - http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx – mark

+0

더 나은 - Dns.GetHostAddresses (string.Empty) – mark

관련 문제