2011-11-16 11 views
6

Ho un paio di nomi di host che ho bisogno di confrontare e dire se rappresentano lo stesso host, ad esempio:Come confrontare correttamente i nomi host

localhost 
127.0.0.1 
machineName 

Qual è il modo più affidabile per farlo in C# ? Per ora sto facendo che, come:

private bool CompareHosts(string host1, string host2) 
    { 
      UriBuilder builder1 = new UriBuilder(); 
      builder1.Host = Dns.GetHostAddresses(host1)[0].ToString(); 
      var uri1 = builder1.Uri; 

      UriBuilder builder2 = new UriBuilder(); 
      builder2.Host = Dns.GetHostAddresses(host2)[0].ToString(); 
      var uri2 = builder2.Uri; 

      return Uri.Compare(uri1, uri2, UriComponents.Host, 
        UriFormat.Unescaped, StringComparison.OrdinalIgnoreCase) == 0; 
    } 

io non ho incluso la gestione di indirizzi host gamma errore, ma non sono sicuro di cosa fare se si tornerà più di un indirizzo, significa che rappresenteranno diverse macchine? C'è un modo migliore per confrontarli? Devo controllare che quegli host si riferiscano alla stessa macchina.

+2

Non dimenticare ':: 1' e' 0: 0: 0: 0: 0: 0: 0: 1' anche; p –

+0

È corretto che un singolo nome host possa avere più indirizzi IP - considera il caso di un PC con 5 schede di rete ... Vedere http://support.microsoft.com/kb/110703 per la conferma. –

+0

@RB - Meno raro che 5 schede di rete sarebbero solo che più indirizzi IP sono stati assegnati a una singola connessione. –

risposta

2

La risposta generale è no, se si dispone di una macchina con 2 schede di rete (ad esempio), non esiste un modo sicuro per sapere che proviene dalla stessa macchina, poiché si tratta di 2 elementi di rete distinti.

Tuttavia, è possibile gestire alcuni casi speciali come il localhost rispetto a 127.0.0.1 che ha citato.

Quando si ottengono più IP dalla query DNS, solitamente le macchine NON SONO uguali, poiché questa tecnica viene comunemente utilizzata per il bilanciamento del carico tra macchine diverse.

In passato c'erano molte tecniche di hacking per scoprire se 2 ips sono le stesse macchine, in alcuni casi è possibile ottenere il tempo interno della macchina o se ha aperto le porte in un ordine consecutivo si potrebbe anche usare quello. Ma consiglio vivamente di non andare in quel modo. Probabilmente è meglio raggiungere il tuo obiettivo senza fare questo controllo (ad esempio se hai un'applicazione web puoi usare facilmente i cookie per questo). Ancora una volta, bisogno di più contesto per aiutare.

+0

Ciao @idanzalz, non è un'applicazione web, è un'applicazione desktop in cui l'utente può inserire un paio di host (ip o machineName) per server diversi e ho bisogno di analizzarli e dire se sono sulla stessa macchina o no – username

+0

cosa intendi con "analizzare". hanno qualcosa di installato con cui puoi parlare? conosci i sistemi operativi? Se si tratta di una macchina Windows, probabilmente si può ottenere il nome della macchina tramite netbios. È possibile controllare/assumere qualcosa sulla configurazione della macchina? – idanzalz

+0

L'unica supposizione che posso fare è che su queste macchine sono installate finestre. A seconda che due host rappresentino la stessa macchina, devo assicurarmi di fornire loro la stessa configurazione. Ma non controllo quale software è installato sulle macchine. – username

Problemi correlati