什么是公网IP
在互联网上,每个设备都需要一个唯一的标识以进行通信。这个标识就是IP地址。IP地址又分为内网IP和公网IP两种。内网IP是指在局域网中使用的IP地址,而公网IP则是在互联网上使用的IP地址。
为什么需要获取公网IP
获取公网IP的场景很多,比如:
需要远程访问服务器的情况下,需要知道服务器的公网IP
某些应用程序需要获取用户的公网IP,以便提供更好的服务
网络管理员需要获知自己网络下某一个用户的公网IP地址,方便排查网络问题
如何获取公网IP
获取公网IP的方法有很多,其中一个比较简单的方法是使用PHP。
在PHP中,我们可以使用 $_SERVER
变量来获取客户端访问网站时所用的IP地址。但是这个IP地址并不一定是公网IP地址,有可能是内网IP地址。要获取公网IP,则需要使用一些第三方接口。
以下是几种获取公网IP的方法:
1. 使用第三方接口/API
通过使用一些第三方的IP查询接口,可以获取到当前服务器所使用的公网IP地址。比如:http://ifconfig.me/ip
或 http://icanhazip.com
等。
<?php
// 获取IP
$ip = file_get_contents('http://ifconfig.me/ip');
echo $ip;
?>
2. 使用网页抓取
可以通过网页抓取的方式,获取一些公网IP查询网站上的IP地址。这种方法的好处是可以选择自己信任的网站进行查询,但是需要考虑一些反爬虫的措施。
<?php
// 获取IP
$ch = curl_init("http://ip.chinaz.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36');
$output = curl_exec($ch);
curl_close($ch);
// 解析HTML,获取IP
$doc = new DOMDocument();
@$doc->loadHTML($output);
foreach ($doc->getElementsByTagName('div') as $div) {
if ($div->getAttribute('class') == 'IcpMain02') {
foreach ($div->getElementsByTagName('span') as $span) {
if ($span->getAttribute('class') == 'fr WhwtdWrap mr5') {
$ip = $span->nodeValue;
}
}
}
}
echo $ip;
?>
3. 使用DNS解析
通过使用DNS解析器,可以获取到当前域名所对应的公网IP地址。这种方法的好处是可以不用去访问第三方接口或网站,速度比较快。
<?php
// 获取IP
$ip = gethostbyname('example.com');
echo $ip;
?>
总结
获取公网IP的方法有很多,可以根据自己的需求选择不同的方法。但是需要注意的是,有些网站或者接口可能会因为访问过于频繁而限制访问,所以需要谨慎使用。
为你推荐
- 2023-06-25php querylist(使用PHP QueryList进行数据爬虫)
- 2023-09-08php tree(PHP实现树形结构的代码实例)
- 2023-09-11php httpget(PHP实现HTTP Get请求)
- 2023-08-27idea运行php(用 PHP 实现优秀的刻意练习:打造高效能力的秘诀)
- 2023-06-24php 发送post(用 PHP 发送 POST 请求)
- 2023-08-01php length(PHP字符串长度函数的用法)
- 2023-07-30php arsort(PHP arsort函数用法及示例)
- 2023-08-31php startup(PHP启动出现问题的解决方法)