JS获取本机IP地址的方法(附上解决浏览器无法获取IP的方法)

JavaScript011

JS获取本机IP地址的方法(附上解决浏览器无法获取IP的方法),第1张

获取本机IP地址: if(typeof window != 'undefined'){     var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection     if (RTCPeerConnection) (()=>{         var rtc = new RTCPeerConnection()         rtc.createDataChannel('') //创建一个可以发送任意数据的数据通道         rtc.createOffer( offerDesc => { //创建并存储一个sdp数据         rtc.setLocalDescription(offerDesc)     }, e => { console.log(e)})     rtc.onicecandidate =(evt) => { //监听candidate事件         if (evt.candidate) {             console.log('evt:',evt.candidate)             let ip_rule = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/             var ip_addr = ip_rule.exec(evt.candidate.candidate)[1]             console.log('ip_addr:',ip_addr)   //打印获取的IP地址         }}     })()     else{console.log("没有找到")} } 如果电脑没获取到,基本上是因为浏览器限制了,解除方法如下: 解决方案: 火狐(FireFox) 删除隐藏IP 浏览器输入 about:config 搜索配置 media.peerconnection.enabled 改为false ( 刷新程序,IP正常显示 ) 谷歌(Chrome) 删除隐藏IP 浏览器输入:chrome://flags/#enable-webrtc-hide-local-ips-with-mdns 把 Anonymize local IPs exposed by WebRTC 设置为 disabled ( 刷新程序,IP正常显示 )

JavaScript 获取的 IP 有个优点就是它获取的是本机设置的 IP,如果计算机通过局域网上网,那么它获得的就是计算机的局域网 IP,而不像 ASP 中 Request 获取的是计算机连接到互联网的 IP。通过两种获取 IP 的方法,就可以确定某一台计算机。

代码:

<html>

<head>

<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">

<title>JavaScript获取客户端IP</title>

</head>

<body>

<script type="text/javascript" language="javascript">

<!--

function GetLocalIPAddress()

{

var obj = null

var rslt = ""

try

{

obj = new ActiveXObject("rcbdyctl.Setting")

rslt = obj.GetIPAddress

obj = null

}

catch(e)

{

//异常发生

}

return rslt

}

document.write("你的IP是:" + GetLocalIPAddress())

//-->

</script>

</body>

</html>

在使用中可能会出现类似下图的警告,点击“是”,就可以运行了,也可以在【Internet 选项】中【安全】->【ActiveX 控件和插件】->【对没有标记为安全的 ActiveX 控件进行初始化和脚本运行】设置为【启用】,就不会弹出对话框了。有时候测试时因代码出错既不弹出对话框,也不显示 IP,更正代码后也是一样的情况,这时你需要重新打开 IE 进行测试,在实际使用中,不会出现类似情况。

本机IP可以这样获取:

function myIP() {

    if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest()

    else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")

    xmlhttp.open("GET","http://api.hostip.info/get_html.php",false)

    xmlhttp.send()

    hostipInfo = xmlhttp.responseText.split("\n")

    for (i=0 hostipInfo.length >= i i++) {

        ipAddress = hostipInfo[i].split(":")

        if ( ipAddress[0] == "IP" ) return ipAddress[1]

    }

    return false

}

myIP()//返回值就是

局域网IP你也可以仿照上面的方式,用JSONP来做,自己提供服务端接口