PHP解析主机+ IP到IP地址的唯一
我试图让这个:46-121-31-23.example.net
PHP解析主机+ IP到IP地址的唯一
被解析到这一点:46.121.31.23
更换连字符和使用正则表达式是不够的删除角色,因为这样的结果将是46.121.31.23..
gethostbyname()
怎么样?虽然您的特定主机名将IPv4地址编码为其“友好”名称,但不能保证永远是真实的。因此,使用真实的名称 - > IP查询系统:DNS
$ip = gethostbyname('46-121-31-23.example.net');
echo $ip; // 46.121.31.23
评论随访:该主机名显然不存在:
[email protected]:~$ host -t ns static.012.net.il
static.012.net.il name server pdns.goldenlines.net.il.
static.012.net.il name server sdns.goldenlines.net.il.
[email protected]:~$ host 46-121-31-23.static.012.net.il pdns.goldenlines.net.il
Using domain server:
Name: pdns.goldenlines.net.il
Address: 212.117.129.3#53
Aliases:
Host 46-121-31-23.static.012.net.il not found: 3(NXDOMAIN)
因此没有办法做一个DNS查找,因为那个域的权威服务器不知道你在说什么。
然而,反向映射(IP->主机名)DOES工作:
[email protected]:~$ host 46.121.31.23
23.31.121.46.in-addr.arpa domain name pointer 46-121-31-23.static.012.net.il.
所以,出于某种原因,该提供的只是做反向映射,而不是向前。
出于某种原因,不适用于'gethostbyname('46 -121-31-23.static.012.net.il')'。 – Lior 2012-01-27 22:24:28
@Lior:见编辑 – 2012-01-28 02:45:35
是这样的吗?
$ip = preg_replace("/\..*/", "", $ip);
$ip = str_replace("-", ".", $ip);
虽然,我同意@klaustopher,使用gethostbyname
一般是安全的:(http://php.net/manual/en/function.gethostbyname.php)。
编辑:
此外,您还可以尝试做这种方式:Get IP from DNS without using gethostbyname?
if (preg_match('/(\d{1,3})-(\d{1,3})-(\d{1,3})-(\d{1,3})/', $hostname, $ip)) {
$ip = "{$ip[1]}.{$ip[2]}.{$ip[3]}.{$ip[4]}";
}
应该工作。
把所有东西都拿出来,直到'。'然后用'.'代替'-' – ManseUK 2012-01-27 22:10:08
不是每一个provier都给你这种形式的主机。获得IP地址的最佳机会是使用'gethostbyname($ yourHost)' – klaustopher 2012-01-27 22:11:55
这不是HOST + IP,它只是HOST。你的问题不是很确切。 – hakre 2012-01-28 12:32:21