2016-06-21 2 views
10

Мне нужно реализовать решение от WinApp, написанное в C# до PHP. Мне нужно извлечь IP на основе host name. Ниже фрагмент кода работает отлично:PHP Получить IP на основе имени хоста

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

Единственный вариант, я нашел до сих пор в PHP является:

gethostbyname('hostname'); 

Но это возвращает другой IP для того же хоста, чем C# кода. Кроме того, возвращается IP. Если я проверю соответствующий хост с помощью nslookup -IPaddress-, тогда я получаю совершенно другое имя хоста.

Что происходит? Какие другие методы можно было бы использовать для поиска из host в сети с использованием PHP?

+0

Происходит ли эта ошибка со всеми именами хостов? Вы сказали, что находитесь во внутренней сети, что происходит, когда вы проверяете внешне? Что относительно gethostbynamel (получает список, если хост имеет несколько IP-адресов)? Кроме того, gethostbyname использует библиотеку resolver базовой ОС (Linux/Windows) - не уверен, как работает версия C#. Наконец, если вы обнаружите, что запрашиваете неправильный DNS, для этого есть библиотека Pear: http://pear.php.net/package/Net_DNS2 – lydiat

+0

Кажется, что это может быть проблема, связанная с машиной: можете ли вы попробовать тот же код (и 'nslookup') с другого компьютера в той же сети? В качестве альтернативы, с виртуальной машины или дистрибутива Linux? – Viruzzo

+0

Это только для обратного поиска DNS или вы пытаетесь получить общий DNS? – Machavity

ответ

5

вы можете использовать php dns_get_record function

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

А потом посмотреть в массиве для записи типа A (означает IPv4)

+0

Это возвращает многомерный 'массив', содержащий 2' subarrays'. Оба содержат запись типа 'A'. Первый - тот же (неверный), что и в 'gethostbyname()'. Второй также неверен. 'nslookup' ничего не возвращает для этого. – fishmong3r

+1

странно, какое имя хоста вы пытаетесь получить? возможно, ваши настройки dns повреждены? – fucethebads

+0

Это просто имя компьютера в корпоративной сети. Вероятно, проблема с DNS, но как тогда возможно, что другой код вернет правильное значение? – fishmong3r

2

Есть два решения, чтобы получить IP хоста с помощью 2 предопределенных функциями

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

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

Будет работать, если у вас есть доступ к этим сайтам через ваш брандмауэр. он блокируется, тогда вы увидите свой локальный ip вместо желаемого IP-адреса.

+0

Могу ли я использовать те же функции в C#.? будут ли они работать.? – Developer

+0

Я должен проверить. –

+1

Вы не можете использовать любую функцию C# в PHP – Dharam

Смежные вопросы