php 获取自己的公网IP

本文介绍了如何使用PHP脚本从动态DNS获取当前的公网IP地址,并通过正则表达式匹配提取该地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
$externalContent = file_get_contents('http://checkip.dyndns.com/');
preg_match('/Current IP Address: \[?([:.0-9a-fA-F]+)\]?/', $externalContent, $m);
$externalIp = $m[1];
echo $externalIp;

 

转载于:https://www.cnblogs.com/johnsonshu/p/5152624.html

<think>好的,用户想了解如何在程序中或通过命令行获取公网IP地址。我需要结合用户提供的引用资料,整理出不同的方法,并且按照用户的要求分点回答。 首先,用户提到的引用中有几个方法。比如引用[1]提到使用curl、wget、lynx访问特定网站,还有OpenDNS的dig和host命令。引用[2]给出具体的wget命令,引用[4]详细说明了dig的用法。引用[3]提到了public-ip-cli这个工具,而引用[5]则涉及编程方法,使用QNetworkReply类处理HTTP响应来获取IP。 我需要把这些方法分类,可能分为命令行工具和编程实现两部分。命令行部分可以包括直接访问网站和使用DNS查询。编程部分可以用Python、Node.js、PHP等例子,可能参考引用[5]的Qt方法。 同时要注意用户给的系统级指令,比如行内数学表达式用$...$,独立公式用$$...$$,但这个问题可能不太涉及数学公式,所以可能不需要。另外要生成相关问题,确保回答结构清晰。 需要检查是否有遗漏的方法,比如引用[3]的public-ip-cli是否需要单独说明安装使用步骤?可能需要简要提一下。还有,引用[5]中的代码示例可能用C++ Qt框架,但用户的问题可能更希望其他语言比如Python的例子,所以需要调整。 另外要注意引用标识的正确添加,每个方法的末尾需要自然添加对应的引用标记。比如使用curl的方法引用[1],dig的方法引用[4]等。 现在开始组织内容: 第一部分是命令行方法,分点说明使用HTTP请求和DNS查询两种方式。每个小点给出具体命令,并标明引用来源。例如,curl、wget属于第一类,dig属于第二类。 第二部分是编程实现,分语言举例,如Python使用requests库,Node.js用http请求,PHP用file_get_contents,以及C++ Qt的例子。其中Qt的例子参考引用[5],需要说明如何处理响应数据。 第三部分是第三方工具,比如public-ip-cli,需要说明安装和使用方法,引用[3]。 最后生成相关问题,比如如何验证IP的正确性,是否有其他API,安全风险等,结合用户之前的问题可能相关的点。 需要确保每个步骤都符合用户的格式要求,不使用markdown,代码块用正确格式,引用正确。同时语言保持口语化,但整体结构清晰。</think>在程序中或通过命令行获取公网IP地址的方法可分为以下三类: ### 一、通过HTTP请求获取公网IP 1. **命令行工具直接请求API** - 使用`curl`: ```bash curl ifconfig.me curl icanhazip.com ``` 部分服务会返回纯文本格式的IP地址[^1][^2] - 使用`wget`: ```bash wget -qO- http://ipecho.net/plain | xargs echo ``` 通过管道处理输出结果[^2] 2. **编程实现示例(Python)** ```python import requests def get_public_ip(): response = requests.get('https://api.ipify.org') return response.text ``` 调用第三方API接口获取IP地址[^5] ### 二、通过DNS查询获取公网IP 1. **使用OpenDNS解析** ```bash dig +short myip.opendns.com @resolver1.opendns.com ``` 通过DNS解析协议获取IP,无需HTTP请求[^4] 2. **host命令查询** ```bash host myip.opendns.com resolver1.opendns.com ``` 输出结果需提取IP字段 ### 三、使用第三方工具 1. **public-ip-cli工具** ```bash npx public-ip-cli ``` 需先通过`npm install -g public-ip-cli`安装[^3] ### 四、进阶编程方法(C++/Qt) ```cpp QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply) { QString ip = QString(reply->readAll()).trimmed(); qDebug() << "Public IP:" << ip; }); manager->get(QNetworkRequest(QUrl("https://api.ipify.org"))); ``` 通过异步网络请求处理IP响应[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值