js获取本地ip地址和外网IP地址

更新日期: 2021-04-19阅读: 6.9k标签: ip

分享一个js获取ip地址的代码,可用于获取本地ip地址与外网ip地址,有需要的朋友参考下。

1,获取内网ip

function getIP(callback) {
        let recode = {};
        let RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
        // 如果不存在则使用一个iframe绕过
        if (!RTCPeerConnection) {
            // 因为这里用到了iframe,所以在调用这个方法的script上必须有一个iframe标签
            // <iframe id="iframe" sandbox="allow-same-origin"></iframe>
            let win = iframe.contentWindow;
            RTCPeerConnection = win.RTCPeerConnection || win.mozRTCPeerConnection || win.webkitRTCPeerConnection;
        }

        //创建实例,生成连接
        let pc = new RTCPeerConnection();

        // 匹配字符串中符合ip地址的字段
        function handleCandidate(candidate) {
            let ip_regexp = /([0-9]{1,3}(\.[0-9]{1,3}){3}|([a-f0-9]{1,4}((:[a-f0-9]{1,4}){7}|:+[a-f0-9]{1,4}){6}))/;
            let ip_isMatch = candidate.match(ip_regexp)[1];
            if (!recode[ip_isMatch]) {
                callback(ip_isMatch);
                recode[ip_isMatch] = true;
            }
        }

        //监听icecandidate事件
        pc.onicecandidate = (ice) => {
            if (ice.candidate) {
                handleCandidate(ice.candidate.candidate);
            }
        };
        //建立一个伪数据的通道
        pc.createDataChannel('');
        pc.createOffer((res) => {
            pc.setLocalDescription(res);
        }, () => {});

        //延迟,让一切都能完成
        setTimeout(() => {
            let lines = pc.localDescription.sdp.split('\n');
            lines.forEach(item => {
                if (item.indexOf('a=candidate:') === 0) {
                    handleCandidate(item);
                }
            })
        }, 1000);
    }

调用该函数

getIP( function (ip) {
    console.log(ip);
})

// 192.168.1.191
// 2001::2841:aa90:2843:1983:e4d1:a9b8

上面的是ipv4的,下面的是ipv6.


1,获取外网ip

发现比较全而好的前端获取客户端IP的方法基本都是通过三方接口。也就是调用别人写好的接口。用浏览器已有的控件ActiveXObject的控件方式,有一定的兼容性问题。

方法一:(所有的平台及浏览器)

使用搜狐接口:

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
document.write(returnCitySN["cip"]+','+returnCitySN["cname"])
</script>

方法二:(所有的平台及浏览器)

使用新浪接口:(我测试过,此方法好像不行。访问网站也不能访问了。)

<script type="text/javascript" src="http://counter.sina.com.cn/ip/" charset="gb2312"></script>       <!--获取接口数据,注意charset -->
<script type="text/javascript">
document.writeln("IP地址:"+ILData[0]+"<br />");             //输出接口数据中的IP地址
document.writeln("地址类型:"+ILData[1]+"<br />");         //输出接口数据中的IP地址的类型
document.writeln("地址类型:"+ILData[2]+"<br />");         //输出接口数据中的IP地址的省市
document.writeln("地址类型:"+ILData[3]+"<br />");         //输出接口数据中的IP地址的
document.writeln("地址类型:"+ILData[4]+"<br />");         //输出接口数据中的IP地址的运营商
</script>

方法三:

个人Robert Hashemian写的:

<script language="JavaScript" src="http://www.hashemian.com/js/visitorIP.js.php"></script>
<script language="JavaScript">
    VIH_BackColor = "palegreen";
    VIH_ForeColor = "navy";
    VIH_FontPix = "16";
    VIH_DisplayFormat = "You are visiting from:<br>IP Address: %%IP%%<br>Host: %%HOST%%";
    VIH_DisplayOnPage = "yes";
</script>

方法四:(只针对IE且客户端的IE允许AcitiveX运行,通过平台:XP,SERVER03,2000)。

利用ActiveXObject控件,ie浏览器里要开启此控件:

<script language="JavaScript">
function GetLocalIPAddr(){ var oSetting = null; var ip = null; try{ oSetting = new ActiveXObject("rcbdyctl.Setting"); ip = oSetting.GetIPAddress; if (ip.length == 0){ return "没有连接到Internet"; } oSetting = null; }catch(e){ return ip; } return ip; } document.write(GetLocalIPAddr()+"<br/>")
</script>


链接: https://fly63.com/article/detial/10237

node.js监听不同ip地址的差异

IP地址一共分为A~E5类,它们分类的依据是其net-id所占的字节长度以及网络号前几位。127.0.0.1:回环地址。该地址指电脑本身,主要预留测试本机的TCP/IP协议是否正常。只要使用这个地址发送数据,则数据包不会出现在网络传输过程中。

子网掩码的概念、规则

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码的设定必须遵循一定的规则

nginx 对同一 ip 访问请求速率限制

模块ngx_http_limit_req_module,所述ngx_http_limit_req_module模块(0.7.21)用于限制每一个定义的键值的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。使用“漏桶”方法进行限制。

vue-cli启动本地服务,局域网下通过ip访问不到的原因

新开发了一个vue-cli项目,想通过手机查看效果,发现访问不到,ip地址和端口号都没错但是手机访问不到,在本机电脑浏览器输入ip端口号一样访问不到,只能通过localhost:8080访问到,同一局域网下其他的手机和电脑并不能通过ip地址访问调试

Js正则表达式验证IP地址

正则验证合法_有效的IP地址(ipv4/ipv6),不墨迹直接上代码,正则表达式:/^*****$/,JS函数方法:

前端Js获取本网IP和外网IP方法总汇

我们应该知道一台电脑需要两个ip才可以上网,一个是本地的内网ip(本地ip),另一个就是外网ip(公网ip)。值得说明的是:外网ip具有世界范围的唯一性

利用宝塔面板计划任务shell脚本扫描恶意IP

我们需要找到恶意ip,可以利用脚本分析在一分钟单个IP访问的频率,超过一定的频率(一般来正常的访问,一分钟内应该不超过60次,你可以设置为更小),即认定为恶意IP。宝塔面板的shell脚本如下:

IPv4 子网查询

A类:1.0.0.0~126.255.255.255,默认子网掩码/8,即255.0.0.0 (其中127.0.0.0~127.255.255.255为环回地址,用于本地环回测试等用途);B类:128.0.0.0~191.255.255.255,默认子网掩码/16,即255.255.0.0;

一文聊透 IP 地址的那些事

IP 地址,是一个大家都耳熟能详的名词。 以生活举例,IP 在互联网中的作用就像是寄件时的收件人地址和寄件人地址,收件人地址让信件可以被正确送达,寄件人地址则让收到信的人可以回信。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!