2010-02-16 3 views
5

로컬 어댑터 서브넷에서 다음에 사용하지 않는 IP 주소를 찾는 가장 쉬운 방법은 무엇입니까?현재 서브넷에서 무료 IPAddress를 찾는 가장 쉬운 방법은 무엇입니까?

IPAddress GetNextFreeIP(NetworkInterface intface) 
{ 
    ...? 
} 

업데이트 나는 많은 다른 시나리오 (크로스 오버 케이블, 소규모 개인 네트워크, 대기업 네트워크)에 사용될 수있는 BOOTP/TFTP 서버를 작성했습니다
. 나는 작은 임베디드 시스템에 IP 주소를 업데이트하고 사용할 여분의 것을 찾고 싶습니다. ...

+3

DHCP 서버에 질문 할 수 있습니까? – David

+0

당신의 프로그램은 DHCP, 정적 IP 또는 (최후의 수단으로) 당신의'GetNextFreeIP'를 사용하여 추측하도록 명령 줄 옵션을 받아 들일 수 있어야합니다. – meagar

답변

0

IP가 사용되지 않도록하는 방법이 없다는 것은 기술적으로 모두 옳은 것입니다. 하지만 지금은 이것에 의존하기로했습니다 ...

public static IPAddress FindNextFree(this IPAddress address) 
    { 
     IPAddress workingAddress = address; 
     Ping pingSender = new Ping(); 

     while (true) 
     { 
      byte[] localBytes = workingAddress.GetAddressBytes(); 

      localBytes[3]++; 
      if (localBytes[3] > 254) 
       localBytes[3] = 1; 

      workingAddress = new IPAddress(localBytes); 

      if (workingAddress.Equals(address)) 
       throw new TimeoutException("Could not find free IP address"); 

      PingReply reply = pingSender.Send(workingAddress, 1000); 
      if (reply.Status != IPStatus.Success) 
      { 
       return workingAddress; 
      } 
     } 
    } 
1

DHCP로 관리되는 IP 범위를 사용하는 경우 대화 할 수있는 인스턴스가 있습니다. DHCP 서버 (예 : David 권장)

관리되는 IP 범위가없고 대화 할 수있는 다른 인스턴스가 없으면 IP를 사용했는지 사용하지 않았는지 알 수있는 확실한 방법이 없습니다. IP는 그러한 서비스 자체를 제공하지 않습니다.

+0

+1은 DHCP가 해결하기 위해 고안된 ** 문제 **이므로 **에 대한 것입니다. – Aaronaught

+0

192.158.1.128/24에서 192.168.1.254/24까지의 주소가 수동으로 할당되는 반면, DHCP는 192.168.1.1/24에서 192.168.1.128/24로 주소를 부여하도록 구성 될 수 있습니다. 이 시나리오에서 DHCP로부터 얻을 수있는 정보는 무엇입니까? 원래 질문에 대한 정답은 @tuinstoelen과 @ Thorsten79가 지적했듯이 "할 수 없다"*뿐입니다. –

0

Thorsten79가 말한대로 짧은 대답은 할 수 없습니다.

약간 더 이상 답 :

그것은 네트워크의 구성에 따라 달라집니다 : 관리자가 IP 주소를 할당하기로 결정했다 방법에 대해 설명합니다. 일반적으로 서버, 라우터 등에 수동으로 할당 된 IP 주소와 워크 스테이션 등을위한 dhcp 할당 IP 주소가 혼합되어 있습니다.

dhcp 서버와 통화 할 수있는 경우 예약 된 범위의 어떤 주소가 무료인지 알 수 있지만 나머지 주소는 찾을 수 없습니다.

더 흥미로운 질문은 달성하려는 것입니다. 아마도 그것은 다른 방식으로 실현 될 수 있습니까?

1

DHCP 서버를 묻는 것 외에도 서브넷에서 브로드 캐스트 핑을 수행하고 모든 컴퓨터에서 응답을 수집하고 IP 주소를 정렬하여 다음 주소를 쉽게 찾을 수 있습니다. 물론 이것은 모든 장치가 온라인 상태이고 브로드 캐스트에 응답한다고 가정합니다. 그래서 꽤 통제 된 환경에서는 이것이 가능할 수 있습니다.

+0

문제는 충분히 발전된 네트워크에서 어떤 호스트가 작동하는지, 어느 라우터가 핑 패킷을 필터링하는지 등을 결코 알 수 없다는 것입니다. 슬픈 듯이 IP 자체에서이를위한 안정적인 방법은 없습니다. – Thorsten79

0

TFTP 서버가있는 임베디드 장치에서 본 것은 문서화 된 하드 코딩 된 IP 주소로 부팅됩니다. 설정된 시간 (~ 3-10 초)이 지나면 부트 로더는 구성을 읽고 IP 주소를 설정하는 응용 프로그램으로 제어를 이전합니다.

부트 로더를 사용하여 새 펌웨어를로드하려면 설명서를 읽고 동일한 서브넷에서 IP 주소에 도달 할 수 있는지 확인한 다음 장치를 재부팅하고 응용 프로그램을 장치로 TFTP해야합니다 .

+0

이 장치는 BOOTP를 사용하여 IP 주소와 TFTP 서버 주소를 가져옵니다 ... – Tim

관련 문제