获取用户IP的几种办法

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 地址:github.com/omozzww/exp…

原生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)
  })
}
复制代码

转载于:https://juejin.im/post/5c14766de51d45351129aa84

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值