PHP解析主机+ IP到IP地址的唯一

PHP解析主机+ IP到IP地址的唯一

问题描述:

我试图让这个:46-121-31-23.example.netPHP解析主机+ IP到IP地址的唯一

被解析到这一点:46.121.31.23

更换连字符和使用正则表达式是不够的删除角色,因为这样的结果将是46.121.31.23..

+2

把所有东西都拿出来,直到'。'然后用'.'代替'-' – ManseUK 2012-01-27 22:10:08

+4

不是每一个provier都给你这种形式的主机。获得IP地址的最佳机会是使用'gethostbyname($ yourHost)' – klaustopher 2012-01-27 22:11:55

+0

这不是HOST + IP,它只是HOST。你的问题不是很确切。 – hakre 2012-01-28 12:32:21

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. 

所以,出于某种原因,该提供的只是做反向映射,而不是向前。

+1

出于某种原因,不适用于'gethostbyname('46 -121-31-23.static.012.net.il')'。 – Lior 2012-01-27 22:24:28

+0

@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]}"; 
} 

应该工作。