본문 바로가기
HW 프로그래밍/아두이노

연결된 외부 IP가져오기

by N2info 2023. 7. 26.

Update

chart.openai.com의 도움을 받아 아래와 같이 아두이노에서 외부IP를 구하는것을 구현함

 

방법 1 

httpbin.org 사이트에서 IP확인하는 방법인데 받아온 응답에서 "origin" 위치를 찾고 글자수를 계산하여 IP 를 받아오는 방법이다. 2021년까지 학습된 내용으로 현재와는 차이가 있다. 아무튼 아래와 같이 하면 IP를 문자열로 받아온다.(2023.12.03 기준)

String getExternalIP() {
  WiFiClient client;
  if (client.connect("httpbin.org", 80)) {
    client.print("GET /ip HTTP/1.1\r\nHost: httpbin.org\r\n\r\n");
    delay(500); // Give the server some time to respond
    while (client.available()) {
      String line = client.readStringUntil('\r');
      //Serial.println(line);  //전체 회신텍스트
      if (line.indexOf("origin") != -1) {
        int start = line.indexOf(":") + 3;
        int end = line.length() - 4;  // 원래는 -2였으나 "가 표시되어 수정함        
        //Serial.println(line.substring(start, end)); //IP 부분만
        return line.substring(start, end);
      }
    }
    client.stop();
  }
  return "Failed to get external IP";
}

 

Windows 명령어모드에서도 확인 가능한데 아래와 같이 입력하면 된다

C:\Users\john>curl -X GET "https://httpbin.org/ip" -H "accept: application/json"
{
  "origin": "123.132.132.132"  // 임시로적음
}

C:\Users\joh>

방법2

ipconfig.me 사이트에서 IP확인하는 방법인데 windwos 명령어모드에서는 깔끔하다 그러나 아두이노에서는 그렇지 않다.

C:\Users\john>curl http://ifconfig.me
123.132.132.132
C:\Users\john>

 

방법2는 특정위치에서 찾아야하는 키워드가 없어서 IP값을 가져오기 쉽지않다.

고수들을 위해 사용한소스와 결과를 남겨둔다.(2023.12.03 기준)

String getExternalIP() {
  WiFiClient client;

  if (client.connect("ifconfig.me", 80)) {
    client.print("GET / HTTP/1.1\r\nHost: ifconfig.me\r\n\r\n");
    //client.print("GET /ip");
    delay(500); // 서버 응답을 기다리기 위해 약간의 지연 추가

    // 응답의 첫 줄을 읽음
    //String response = client.readStringUntil('\r');
    String response = client.readString();
    Serial.println(response);
    
    // 응답이 "HTTP/1.1 200 OK"로 시작하면
    if (response.startsWith("HTTP/1.1 200 OK")) {
      // 다음 줄을 읽어 IP 주소를 반환
      response = client.readStringUntil('\r');
      Serial.println(response);
      response.trim();
      return response;
    } else {
      return "Failed to get external IP";
    }

    client.stop();
  }

  return "Failed to connect to ifconfig.me";
}
18:53:32.023 -> server: fasthttp
18:53:32.023 -> date: Sun, 03 Dec 2023 09:53:26 GMT
18:53:32.023 -> content-type: text/plain
18:53:32.064 -> Content-Length: 15
18:53:32.064 -> access-control-allow-origin: *
18:53:32.064 -> via: 1.1 google
18:53:32.064 -> 
18:53:32.064 -> 123.132.132.132

 

내가 연결되 외부아이피(공인아이피) 알아오기 ^0^/

https://www.esp8266.com/viewtopic.php?f=6&t=12782

 

[SOLVED] Getting Public IP through ESP8266 - Everything ESP8266

You say in the subject that it's solved, but you f[…]

www.esp8266.com

api.ipify.org라는 심플한 아이피 알려주는 사이트를 이용한 방법

또는 다른 방법 머가 있을 까

 

찾았음... 물론 위의 방법에서 추출하면 되지만 아래 질문에 달린 댓글은 친절히 추출해 주셨음... (2019.11.17)

땡큐 베리 감사...  line만 따다 붙이면 아이피임 ^0^/

https://stackoverflow.com/questions/48413803/cant-get-public-ip-address-from-esp8266-using-ipify

 

Can't get public IP address from ESP8266 using ipify

I'm using NodeMCU to use ESP8266 and I want to use ipify to get public IP address. But I get -1 on httpCode. Why is that? If I type api.ipify.org, it gets my public IP address properly. void l...

stackoverflow.com

 

출처 : https://tdubu.tistory.com/38

 

아두이노테스트시 베스트 모음(ARDUINO BEST SOURCE)?(2019.11.17)

1. ESP8266 DHT11/DHT22 온습도 시스템 https://randomnerdtutorials.com/esp8266-dht11dht22-temperature-and-humidity-web-server-with-arduino-ide/ ESP8266 DHT11/DHT22 Web Server Arduino IDE | Random Nerd Tutorials In this project you'll create a standalon

tdubu.tistory.com