方法一: 不引入依赖(引用自 https://www.cnblogs.com/c2g5201314/p/12243106.html)
getUserIP() {
var RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection
if (RTCPeerConnection) {
(
function() {
var rtc = new RTCPeerConnection({ iceServers: [] })
if (1 || window.mozRTCPeerConnection) {
rtc.createDataChannel('', { reliable: false })
}
rtc.onicecandidate = function(evt) {
if (evt.candidate) grepSDP('a=' + evt.candidate.candidate)
}
rtc.createOffer(function(offerDesc) {
grepSDP(offerDesc.sdp)
rtc.setLocalDescription(offerDesc)
}, function(e) { console.warn('offer failed', e) })
var addrs = Object.create(null)
addrs['0.0.0.0'] = false
function updateDisplay(newAddr) {
if (newAddr in addrs) return
else addrs[newAddr] = true
var displayAddrs = Object.keys(addrs).filter(function(k) { return addrs[k] })
for (var i = 0; i < displayAddrs.length; i++) {
if (displayAddrs[i].length > 16) {
displayAddrs.splice(i, 1)
i--
}
}
// 打印出该设备连接的所有内网ip
console.log(displayAddrs)
// 排第一个ip
console.log(displayAddrs[0])
}
function grepSDP(sdp) {
var hosts = []
sdp.split('\r\n').forEach(function(line, index, arr) {
if (~line.indexOf('a=candidate')) {
const parts = line.split(' ')
const addr = parts[4]
const type = parts[7]
if (type === 'host') updateDisplay(addr)
} else if (~line.indexOf('c=')) {
const parts = line.split(' ')
const addr = parts[2]
updateDisplay(addr)
}
})
}
})()
} else {
console.log('请使用主流浏览器:chrome,firefox,opera,safari')
}
}
方法二: 引入ip 依赖
先 npm install ip
import IP from 'ip'
console.log(IP.address())
我这边在测试中 使用浏览器时方法一为undefined,方法二为:127.0.0.1
使用electron时都返回了正确的内网IP地址
原因未知