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
api.ipify.org라는 심플한 아이피 알려주는 사이트를 이용한 방법
또는 다른 방법 머가 있을 까
찾았음... 물론 위의 방법에서 추출하면 되지만 아래 질문에 달린 댓글은 친절히 추출해 주셨음... (2019.11.17)
땡큐 베리 감사... line만 따다 붙이면 아이피임 ^0^/
https://stackoverflow.com/questions/48413803/cant-get-public-ip-address-from-esp8266-using-ipify
출처 : https://tdubu.tistory.com/38