Node-RED HTTP 노드에서 클라이언트의 IP 주소 얻기
방법
http in 노드에서 엔드포인트를 작성하고 function 노드에서 검색합니다.
function 노드의 내용
msg.payload = msg.req.ip;
return msg;
흐름
[{"id":"9dad23b5.fd644","type":"http response","z":"4e3881be.18f2e","name":"","statusCode":"","headers":{},"x":550,"y":820,"wires":[]},{"id":"ea07abe6.815c98","type":"http in","z":"4e3881be.18f2e","name":"","url":"/clientip","method":"get","upload":false,"swaggerDoc":"","x":160,"y":820,"wires":[["a30561c.749e7a"]]},{"id":"a30561c.749e7a","type":"function","z":"4e3881be.18f2e","name":"set client ip to payload","func":"msg.payload = msg.req.ip;\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":820,"wires":[["9dad23b5.fd644"]]}]
이 흐름을 배포하고
http://[node-redのhost]/clientip
에 액세스하면 클라이언트의 IP 주소가 표시됩니다.포인트
http in 노드에서 나오는 msg를 debug 노드에서 봐도 msg.res.ip라는 요소를 찾을 수 없지만 Node-RED는 HTTP에 Express를 사용하고 있기 때문에 Express의 요소를 사용할 수있는 것 같습니다.
참고
대시보드에서 이 API에 액세스
자, HTTP의 API가 생겼기 때문에 dashboard로 액세스할까, 라고 생각해 아래의 플로우를 작성.
그러나 반환 클라이언트의 IP 주소는
127.0.0.1
Node-RED 호스트에서 자신의 API에 HTTP를 요청하고 있기 때문에 당연합니다 ...어쩔 수 없이 dashboard template 노드를 사용해, 제대로 클라이언트측으로부터 HTTP 리퀘스트가 날아가게 했다.
template 노드의 내용
<script>
this.scope.action = function() {
let xhr = new XMLHttpRequest();
xhr.open("GET", "../clientip", false);
try {
xhr.send();
if (xhr.status != 200) {
return `Error ${xhr.status}: ${xhr.statusText}`;
} else {
return xhr.response;
}
} catch(err) {
return "Request failed";
}
}
</script>
<md-button ng-click="send({payload:action()})">
Get IP Address
</md-button>
흐름
[{"id":"5eb60b39.a89a64","type":"ui_template","z":"4e3881be.18f2e","group":"4e09a2b6.c91f8c","name":"[button]Get IP Address","order":2,"width":0,"height":0,"format":"<script>\nthis.scope.action = function() {\n let xhr = new XMLHttpRequest();\n xhr.open(\"GET\", \"../clientip\", false);\n try {\n xhr.send();\n if (xhr.status != 200) {\n return `Error ${xhr.status}: ${xhr.statusText}`;\n } else {\n return xhr.response;\n }\n } catch(err) {\n return \"Request failed\";\n }\n}\n</script>\n<md-button ng-click=\"send({payload:action()})\">\n Get IP Address\n</md-button>","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":300,"y":1060,"wires":[["2f5c3897.ce4548"]]},{"id":"2f5c3897.ce4548","type":"debug","z":"4e3881be.18f2e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":510,"y":1060,"wires":[]},{"id":"4e09a2b6.c91f8c","type":"ui_group","z":"","name":"デフォルト","tab":"531fac22.ff06a4","disp":true,"width":"6","collapse":false},{"id":"531fac22.ff06a4","type":"ui_tab","z":"","name":"ホーム","icon":"dashboard","disabled":false,"hidden":false}]
이제 제대로 dashboard에서 클라이언트의 IP 주소를 얻을 수 있었다.
Reference
이 문제에 관하여(Node-RED HTTP 노드에서 클라이언트의 IP 주소 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ktetsuo/items/20751969c806bf9e150c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)