美文网首页
获取用户IP的几种办法

获取用户IP的几种办法

作者: 小白神_ | 来源:发表于2018-12-14 13:32 被阅读0次

    nginx + express 获取用户ip

    nginx 配置

    location / {
        proxy_pass   http://127.0.0.1:3000;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
    }
    

    express 代码片段

    var express = require('express')
    var app = express()
    
    app.get('/', function(req, res) {
        // 获取ip
        var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
        console.log(ip)
        res.send(ip)
    })
    
    app.listen(3000, function() {
        console.log('Server is running in 3000')
    })
    

    demo 地址:https://github.com/omozzww/express-getip

    原生javascript获取用户ip

    存在兼容性问题(不稳定)

    function getUserIp(onNewIP) {
        // campatibility 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);
        }
    }
    
    // ip
    getUserIp(function(ip) {
         console.log('ip', ip);
    });
    

    第三方接口获取用户ip

    function getIp() {
      return new Promise((resolve, reject) => {
        var script = document.createElement('script')
        // script.src = 'https://jsonip.com/'
        script.src = 'http://pv.sohu.com/cityjson?ie=utf-8'
        script.onload = function() {
          resolve(window.returnCitySN)
        }
        document.body.appendChild(script)
      })
    }
    

    相关文章

      网友评论

          本文标题:获取用户IP的几种办法

          本文链接:https://www.haomeiwen.com/subject/qffghqtx.html