2010-02-16 13 views
5

Qual è il modo più semplice per trovare il prossimo indirizzo IP inutilizzato su una subnet degli adattatori locali?Il modo più semplice per trovare indirizzo IP libero nella sottorete attuale?

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

Aggiornamento
Ho scritto un server BOOTP/TFTP che potrebbe essere utilizzato in molti scenari diversi (cavo cross-over, piccola rete privata, grande rete aziendale). Devo dare il sistema embedded piccolo sto aggiornando un indirizzo IP e vorrei trovare un ricambio per poter utilizzare ...

+3

Puoi chiedere al server DHCP? – David

+0

Probabilmente il tuo programma dovrebbe essere in grado di accettare le opzioni della riga di comando per indirizzarlo all'uso di DHCP, un IP statico o (come ultima risorsa) usando il tuo 'GetNextFreeIP'. – meagar

risposta

0

Tutti tecnicamente hai ragione quando dici che non c'è modo di garantire che un IP non venga utilizzato. Ma ho deciso di fare affidamento su questo per ora ...

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

Se si dispone di DHCP gestiti intervalli di indirizzi IP, si dispone di un caso si può parlare a - il server DHCP (come consigliato da David)

Se non si dispone di intervalli IP gestiti e di nessun'altra istanza con cui si può parlare, non esiste un modo affidabile per stabilire se un IP è utilizzato o non utilizzato. IP non offre tale servizio stesso.

+0

+1 per DHCP, poiché questo è ** esattamente ** il problema che DHCP è stato progettato per risolvere! – Aaronaught

+0

Bene, DHCP può essere configurato per fornire indirizzi da dire 192.168.1.1/24 a 192.168.1.128/24, mentre gli indirizzi da 192.158.1.128/24 a 192.168.1.254/24 vengono assegnati manualmente. Che tipo di informazioni otterrai da DHCP in questo scenario ?. L'unica risposta corretta alla domanda originale è * "non puoi" *, come sottolineato da @tuinstoelen e @ Thorsten79. –

0

La risposta breve è che non si può, come ha appena detto Thorsten79.

Una risposta un po 'più lunga:

Dipende dalla configurazione della rete: come l'amministratore ha deciso di assegnare gli indirizzi IP. Di solito c'è un mix di indirizzi IP assegnati manualmente per server, router ecc. E un insieme di indirizzi IP assegnati a DHCP per le workstation e così via.

Se è possibile parlare con il server DHCP, è possibile scoprire quali indirizzi nell'intervallo riservato sono gratuiti, ma per il resto degli indirizzi non è possibile scoprirlo.

La domanda più interessante è che cosa stai cercando di realizzare? Forse può essere realizzato in un modo diverso?

1

Oltre a chiedere al server DHCP, suppongo che si possa eseguire un ping di trasmissione sulla sottorete e raccogliere le risposte da tutti i computer e semplicemente ordinare gli indirizzi IP per trovare quello successivo. Ciò presuppone, naturalmente, che tutti i dispositivi siano on-line e rispondano alle trasmissioni. Quindi in un ambiente piuttosto controllato, questo potrebbe funzionare.

+0

Il problema è che in qualsiasi rete sufficientemente avanzata non si può mai sapere quali host sono attivi, quali router filtrano i pacchetti ping ecc. - Non c'è un modo affidabile per questo nell'IP stesso purtroppo. – Thorsten79

0

Da ciò che ho visto dei dispositivi embedded con un server TFTP, si avviano con un indirizzo IP codificato che è documentato. Dopo un periodo di tempo impostato (~ 3-10 secondi), il boot loader trasferisce il controllo all'applicazione che legge la sua configurazione e imposta l'indirizzo IP.

Se qualcuno desidera utilizzare il caricatore di avvio per caricare il nuovo firmware, è necessario leggere la documentazione, assicurarsi che l'indirizzo IP sia raggiungibile (sulla stessa sottorete), riavviare il dispositivo e TFTP l'applicazione sul dispositivo .

+0

Questo dispositivo utilizza BOOTP per ottenere l'indirizzo IP e l'indirizzo del server TFTP ... – Tim

Problemi correlati