[javascript] get ip only using javascript

Posted by nopsled
2018.04.19 18:06 프로그래밍

Client

>> 내부 아이피


/**

 * Get the user IP throught the webkitRTCPeerConnection

 * @param onNewIP {Function} listener function to expose the IP locally

 * @return undefined

 */

function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs

    //compatibility for firefox and chrome

    var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;

    var pc = new myPeerConnection({

        iceServers: []

    }),

    noop = function() {},

    localIPs = {},

    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,

    key;


    function iterateIP(ip) {

        if (!localIPs[ip]) onNewIP(ip);

        localIPs[ip] = true;

    }


     //create a bogus data channel

    pc.createDataChannel("");


    // create offer and set local description

    pc.createOffer().then(function(sdp) {

        sdp.sdp.split('\n').forEach(function(line) {

            if (line.indexOf('candidate') < 0) return;

            line.match(ipRegex).forEach(iterateIP);

        });

        

        pc.setLocalDescription(sdp, noop, noop);

    }).catch(function(reason) {

        // An error occurred, so handle the failure to connect

    });


    //listen for candidate events

    pc.onicecandidate = function(ice) {

        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;

        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);

    };

}


// Usage


getUserIP(function(ip){

    alert("Got IP! :" + ip);

});


>> 외부 아이피

 $.getJSON('http://ipinfo.io', function(data){

console.log(data);

});


얘들도 답이 없는지 외부 사이트로 xhr 쏜다... jQuery 싫으면 axios로 쏴도된다.

출처 : https://ourcodeworld.com/articles/read/257/how-to-get-the-client-ip-address-with-javascript-only




Server

Routes.route('/testAPI').get(async (req, res) => {

const ip = req.connection.remoteAddress.split(':')[req.connection.remoteAddress.split(':').length-1]

}); 

request 헤더 중에 connection.remoteAddress이 있다. ipv6까지 표시해주는거 같은데 필요없으니까 잘라 주려고 split하고 가져온다.



var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;

아니면 그냥 이거 써도 된다.

'프로그래밍' 카테고리의 다른 글

python pyodbc 설치 탐험기  (0) 2018.06.04
[javascript] calculate datetime  (0) 2018.04.24
[javascript] get ip only using javascript  (5) 2018.04.19
python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
    • 2018.04.22 11:55
    비밀댓글입니다
    • 안녕하세요.

      늦은 답글 죄송합니다. 네 맞습니다.
    • 아 네이버 블로그 시절 서로 이웃이였던 koreascretForce입니다. 아아 오토핫키 덕분에 자주 왕래했었던 기억이 나네요. 한참 마단오토 제작하셨을 때요! 다름이 아니오라 제가 근 2달 전에 외국에서 온 스팸 메일을 한 번 열고 그 메일에 있는 주소에 들어간 적 있습니다. 허나 그 이후로 영어로 된 스팸 메일이 끊임 없이 오는데 혹 차단할 방법이 있거나 이게 뭐 링크로 들어가서 어떠한 프로그램이 자동으로 설치될 리는 없겠지만 혹여나 그런가 싶어 문의드리고자 간만에 찾아뵙네요.. 혹시 아직도 군인 신분 이신건가요?!
    • 앗 안녕하세요! 오랜만이네요. 걱정 안하셔도 됩니다 ㅋㅋ 대부분 자동으로 수집해서 스팸 쏘는거니까 무시하시면 됩니다!
      2.22에 전역했어요
    • 근데 이전에는 오지 않다가 그 주소를 클릭한 뒤에 메일 주소가 계속 바뀌면서 와서 이거 뭐 어떻게 대응할 지 모르겟어서요ㅠㅠㅋㅋㅌㅌㅌㅌㅌ
이 댓글을 비밀 댓글로