[应用相关] 如何获取公网IP呢,比如用于定位城市

[复制链接]
 楼主| 天灵灵地灵灵 发表于 2024-7-5 19:37 | 显示全部楼层 |阅读模式
如果用Arduino ESP8266联网,那么如何获取自己的公网IP?
因为知道了公网IP就可以定位所在的城市,进而从服务器获取相关的数据。
hehhehee 发表于 2024-7-26 14:55 | 显示全部楼层
要在Arduino ESP8266上获取自己的公网IP,可以通过访问一个提供IP地址查询服务的API。


#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting...");
  }

  Serial.println("Connected!");

  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin("http://api.ipify.org");
    int httpCode = http.GET();

    if (httpCode > 0) {
      String ip = http.getString();
      Serial.println("Your public IP is: " + ip);
    } else {
      Serial.println("Error on HTTP request");
    }

    http.end();
  }
}

void loop() {
  // put your main code here, to run repeatedly:
}

 楼主| 天灵灵地灵灵 发表于 2024-8-1 14:55 | 显示全部楼层
方法不错,可以获取到。
juliestephen 发表于 2024-8-12 22:01 | 显示全部楼层
#include <ESP8266WiFi.h>
#include <WiFiClient.h>

const char* ssid = "your_network_ssid";
const char* password = "your_network_password";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  WiFiClient client;
  if (!client.connect("api.ipify.org", 80)) {
    Serial.println("connection failed");
    return;
  }

  String serverRequest = "GET / HTTP/1.1\r\n" +
                         "Host: api.ipify.org\r\n" +
                         "Connection: close\r\n\r\n";
  client.print(serverRequest);

  while(client.available()){
    String line = client.readStringUntil('\n');
    if(line == "\r"){
      break;
    }
  }

  Serial.print("Public IP Address: ");
  Serial.println(client.readStringUntil('\n'));
}

void loop() {
  // Do nothing
}
mickit 发表于 2024-8-12 22:50 | 显示全部楼层
如果你有一个静态公网IP地址,你可以通过查询反向DNS(PTR记录)来获取IP地址。这种方法通常需要你的ISP支持动态DNS更新。
minzisc 发表于 2024-8-13 01:48 | 显示全部楼层
#include <ESP8266WiFi.h>  
#include <ESP8266HTTPClient.h>  
  
void setup() {  
  Serial.begin(115200);  
  WiFi.begin("SSID", "PASSWORD");  
  while (WiFi.status() != WL_CONNECTED) {  
    delay(500);  
    Serial.print(".");  
  }  
  
  HTTPClient http;  
  http.begin("http://ifconfig.me");  
  int httpCode = http.GET();  
  if(httpCode > 0) {  
    String payload = http.getString();  
    Serial.println(payload); // 这将打印出你的公网IP地址  
  }  
  http.end();  
}  
  
void loop() {  
  // 在这个例子中,我们不需要在loop()中做任何事,因为只需要在启动时获取一次IP  
}
deliahouse887 发表于 2024-8-13 04:57 | 显示全部楼层
使用ESP8266获取公网IP地址是一种常见的做法,这通常用于确定设备所在的地理位置,进而可以从服务器获取相关数据。
zerorobert 发表于 2024-8-13 10:10 | 显示全部楼层
知道公网 IP 并不一定能直接精确定位到所在的城市,虽然 IP 地址与地理位置有一定的关联,但这种关联并不是绝对准确的,而且通常需要借助专业的 IP 地址数据库或服务来进行定位。此外,从服务器获取数据可能涉及到各种安全和权限问题,需要遵循相关的规定和协议。
elsaflower 发表于 2024-8-13 16:12 | 显示全部楼层
可能需要进一步学习相关的网络编程和物联网开发知识,以及参考 ESP8266 的相关文档和示例代码。
mickit 发表于 2024-8-13 18:39 | 显示全部楼层
这种方式获取的 IP 地址可能是你的网络出口的 IP,不一定完全代表设备所在的具体地理位置,而且 IP 地址可能会动态变化。
kkzz 发表于 2024-8-13 20:25 | 显示全部楼层
在Windows操作系统中,可以通过命令提示符(cmd)来查询公网IP。只需打开命令提示符,输入ipconfig命令并回车,即可查看到相关的网络配置信息,其中“IPv4 地址”部分即展示了当前设备的公网IP地址。
benjaminka 发表于 2024-8-15 10:39 | 显示全部楼层
ESP8266 本身并不能直接获取公网 IP 地址。ESP8266 是一个 Wi-Fi 模块,它通常用于连接到本地无线网络。
jtracy3 发表于 2024-8-15 14:48 | 显示全部楼层
打开任何网络浏览器,输入“公网IP查询”或“查看我的IP地址”,然后点击搜索。搜索结果通常会直接显示当前设备的公网IP地址。这是一种简单快速的方法,无需任何专业技术或工具。
backlugin 发表于 2024-8-15 18:01 | 显示全部楼层
向一个提供公网IP查询服务的网站发送HTTP GET请求。
linfelix 发表于 2024-8-17 17:46 | 显示全部楼层
向一个提供公网IP查询服务的网站发送HTTP GET请求。
狄克爱老虎油 发表于 2024-8-17 22:17 来自手机 | 显示全部楼层
公网ip准吗
jonas222 发表于 2024-8-17 22:43 | 显示全部楼层
大多数家用路由器都提供一个网页形式的管理界面,可以通过浏览器访问。
jkl21 发表于 2024-8-18 14:59 | 显示全部楼层
http://icanhazip.com或http://checkip.amazonaws.com等,它们也可以用来获取公网IP地址。
wailian1265k 发表于 2024-8-18 15:49 | 显示全部楼层
可以通过HTTP请求访问一个返回公网IP的服务,然后解析响应中的IP地址。
jonas222 发表于 2024-8-18 23:02 | 显示全部楼层
虽然NTP服务器主要用于时间同步,但某些NTP客户端实现可能会在NTP响应中包含客户端的公网IP地址。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

182

主题

3469

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部

182

主题

3469

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部