2016-06-21 30 views
10

Devo implementare una soluzione da WinApp scritta in C# a PHP. Devo estrarre lo IP in base allo host name. Il pezzo di sotto del codice funziona perfettamente:PHP Ottieni IP in base al nome host

IPHostEntry LocalHostIPEntry = Dns.GetHostEntry(hostname); 
IPAddress LocalHostIP = LocalHostIPEntry.AddressList[0]; 
string ipfromhost = LocalHostIP.ToString(); 

L'unica opzione che ho trovato finora in PHP è:

gethostbyname('hostname'); 

Ma che restituisce un diverso IP per lo stesso host rispetto al codice C#. Inoltre, il numero IP restituito non è corretto. Se controllo l'host relativo utilizzando nslookup -IPaddress-, ricevo un nome host completamente diverso.

Cosa sta succedendo? Quali altri metodi potrebbero essere utilizzati per cercare il IP di un host sulla rete utilizzando PHP?

+0

Questo errore si verifica con tutti i nomi host che si tenta? Hai detto che sei su una rete interna, cosa succede quando controlli esternamente? Che dire di gethostbynamel (ottiene un elenco se l'host ha più IP)? Inoltre, gethostbyname utilizza la libreria resolver del SO sottostante (Linux/Windows) - non è sicuro come funzioni la versione di C#. Infine, se trovi che stai interrogando il DNS errato c'è una libreria Pear per questo: http://pear.php.net/package/Net_DNS2 – lydiat

+0

Sembra che potrebbe essere un problema specifico della macchina: puoi provare il stesso codice (e 'nslookup') da una macchina diversa sulla stessa rete? In alternativa, da una macchina virtuale o una distribuzione Linux live? – Viruzzo

+0

È solo per le ricerche DNS inverse o stai cercando di ottenere il DNS generale? – Machavity

risposta

5

è possibile utilizzare il php dns_get_record function

array dns_get_record (string $hostname [, int $type = DNS_ANY [, array &$authns [, array &$addtl [, bool &$raw = false ]]]]) 

E poi cercare nella matrice per un record di tipo A (significa IPv4)

+0

Questo restituisce un 'array' multidimensionale contenente 2' sottoarray'. Entrambi contengono un record di tipo 'A'. Il primo è lo stesso (sbagliato) come nel 'gethostbyname()'. Anche il secondo è errato. 'nslookup' non restituisce nulla per questo. – fishmong3r

+1

strano quale hostname cerchi di ottenere? probabilmente le tue impostazioni DNS sono corrotte? – fucethebads

+0

È solo il nome di un computer sulla rete aziendale. Probabilmente problema DNS, ma come è possibile che l'altro codice restituisca il valore corretto? – fishmong3r

2

ci sono 2 Soluzione per ottenere Host IP utilizzando 2 funzioni predefinite

$ip = gethostbyname('php.net'); 
echo $ip; 

$result = dns_get_record("php.net"); 
print_r($result); 

Lo risolverà quando si accede a tali siti tramite il firewall. sono bloccati, quindi vedrai il tuo IP locale al posto dell'IP del sito desiderato.

+0

posso usare le stesse funzioni in C#? lavoreranno? – Developer

+0

devo controllare. –

+1

Non puoi usare alcuna funzione C# in PHP – Dharam