我正试着这样做:46-121-31-23.example.net
要解析为:46.121.31.23
替换连字符并使用REGEX删除字符是不够的,因为这样做的结果将是46.121.31.23..
答案 0 :(得分:5)
gethostbyname()
怎么样?虽然您的特定主机名将IPv4地址编码为其“友好”名称,但无法保证始终为真。所以使用真实姓名 - > ip查询系统:DNS
$ip = gethostbyname('46-121-31-23.example.net');
echo $ip; // 46.121.31.23
评论后续:该主机名显然不存在:
marc@panic:~$ 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.
marc@panic:~$ 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 工作:
marc@panic:~$ host 46.121.31.23
23.31.121.46.in-addr.arpa domain name pointer 46-121-31-23.static.012.net.il.
因此,由于某种原因,该提供商只进行反向映射,而不是转发。
答案 1 :(得分:1)
这样的东西?
$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?
答案 2 :(得分:1)
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]}";
}
应该工作。