公司网络为AD域环境,想通过 php 的gethostbyaddr() 函数获取到一段IP地址的电脑名称,但通过测试发现gethostbyaddr() 函数返回的电脑名称并非该IP所使用的电脑名称。不知道 gethostbyaddr() 底层的实现原理是什么,望大家赐教。
实验环境:
- centos 6.9 32bit
- php 5.6
- 局域网 AD 域环境
问题说明:
实例代码
$ip = "192.168.32.100"; //ip存在且电脑名称为 it-a20170818.domain.com
$hostname = gethostbyaddr($ip);
echo $hostname;
打印出 $hostname 并不是 it-a20170818.domain.com 而是其他电脑的名称如 hr-a20160818.dommain.com,通过 nslookup hr-a20160818.domain.com 查询到的IP为 192.168.30.100
通过远程确认IP为192.168.30.100的主机名称的确为 hr-a20160818.domain.com
如果通过 gethostbyname 函数访问
$hostname = "it-a20170818.domain.com"; //ip为 192.168.32.100
$ip = gethostbyname($hostname);
echo $ip;
此时打印的ip为正确的 ip 192.168.32.100
疑惑:
- gethostbyaddr() 实现原理是什么?
- gethostbyaddr() 虽然获取到的是与指定IP不一致的电脑名称,但是获取到的电脑名称确实是存在于局域网中的
http://php.net/manual/zh/func...
内部实现原理: https://linux.die.net/man/3/g...