打印
[应用相关]

如何获取公网IP呢,比如用于定位城市

[复制链接]
1811|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如果用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
}

使用特权

评论回复
5
mickit| | 2024-8-12 22:50 | 只看该作者
如果你有一个静态公网IP地址,你可以通过查询反向DNS(PTR记录)来获取IP地址。这种方法通常需要你的ISP支持动态DNS更新。

使用特权

评论回复
6
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  
}

使用特权

评论回复
7
deliahouse887| | 2024-8-13 04:57 | 只看该作者
使用ESP8266获取公网IP地址是一种常见的做法,这通常用于确定设备所在的地理位置,进而可以从服务器获取相关数据。

使用特权

评论回复
8
zerorobert| | 2024-8-13 10:10 | 只看该作者
知道公网 IP 并不一定能直接精确定位到所在的城市,虽然 IP 地址与地理位置有一定的关联,但这种关联并不是绝对准确的,而且通常需要借助专业的 IP 地址数据库或服务来进行定位。此外,从服务器获取数据可能涉及到各种安全和权限问题,需要遵循相关的规定和协议。

使用特权

评论回复
9
elsaflower| | 2024-8-13 16:12 | 只看该作者
可能需要进一步学习相关的网络编程和物联网开发知识,以及参考 ESP8266 的相关文档和示例代码。

使用特权

评论回复
10
mickit| | 2024-8-13 18:39 | 只看该作者
这种方式获取的 IP 地址可能是你的网络出口的 IP,不一定完全代表设备所在的具体地理位置,而且 IP 地址可能会动态变化。

使用特权

评论回复
11
kkzz| | 2024-8-13 20:25 | 只看该作者
在Windows操作系统中,可以通过命令提示符(cmd)来查询公网IP。只需打开命令提示符,输入ipconfig命令并回车,即可查看到相关的网络配置信息,其中“IPv4 地址”部分即展示了当前设备的公网IP地址。

使用特权

评论回复
12
benjaminka| | 2024-8-15 10:39 | 只看该作者
ESP8266 本身并不能直接获取公网 IP 地址。ESP8266 是一个 Wi-Fi 模块,它通常用于连接到本地无线网络。

使用特权

评论回复
13
jtracy3| | 2024-8-15 14:48 | 只看该作者
打开任何网络浏览器,输入“公网IP查询”或“查看我的IP地址”,然后点击搜索。搜索结果通常会直接显示当前设备的公网IP地址。这是一种简单快速的方法,无需任何专业技术或工具。

使用特权

评论回复
14
backlugin| | 2024-8-15 18:01 | 只看该作者
向一个提供公网IP查询服务的网站发送HTTP GET请求。

使用特权

评论回复
15
linfelix| | 2024-8-17 17:46 | 只看该作者
向一个提供公网IP查询服务的网站发送HTTP GET请求。

使用特权

评论回复
16
狄克爱老虎油| | 2024-8-17 22:17 | 只看该作者
公网ip准吗

使用特权

评论回复
17
jonas222| | 2024-8-17 22:43 | 只看该作者
大多数家用路由器都提供一个网页形式的管理界面,可以通过浏览器访问。

使用特权

评论回复
18
jkl21| | 2024-8-18 14:59 | 只看该作者
http://icanhazip.com或http://checkip.amazonaws.com等,它们也可以用来获取公网IP地址。

使用特权

评论回复
19
wailian1265k| | 2024-8-18 15:49 | 只看该作者
可以通过HTTP请求访问一个返回公网IP的服务,然后解析响应中的IP地址。

使用特权

评论回复
20
jonas222| | 2024-8-18 23:02 | 只看该作者
虽然NTP服务器主要用于时间同步,但某些NTP客户端实现可能会在NTP响应中包含客户端的公网IP地址。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

3392

帖子

13

粉丝