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

本文介绍了三种使用JavaScript获取本地内网IP和公网IP的方法,包括新浪的IP地址查询接口、ipify接口以及利用RTCPeerConnection。这些方法可以帮助开发者在网页端获取用户的网络信息。
摘要由CSDN通过智能技术生成

我们应该知道一台电脑需要两个ip才可以上网,一个是本地的内网ip(本地ip),另一个就是外网ip(公网ip)。值得说明的是:外网ip具有世界范围的唯一性,而内网ip只在局域网内部具有唯一性。并且一个局域网里所有电脑的内网IP是互不相同的,但共用一个外网IP。
下面我们通过js来分别获取当前电脑的内网ip和外网ip。

 

js获取内网ip 

方式一:新浪的IP地址查询接口

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

 

方式二:ipify接口,get请求获取

<script>
	function get(url,cb){
		var httpRequest = new XMLHttpRequest();
		httpRequest.open('GET', url, true);
		httpRequest.send();
		httpRequest.onreadystatechange = function () {
		    if (httpRequest.readyState == 4 && httpRequest.status == 200) {
		        var json = httpRequest.responseText;
				cb(json);
		    }
		};	
	}
	get("https://api.ipify.org/?format=json",function(data){
		data=JSON.parse(data);
		console.log(data.ip);
	});
</script>

 

方式三:其它可获取公网IP的网址

http://www.fly63.com/php/ipquery/(推荐,本站推出的工具,除了查询本机公网IP或本地IP外,还支持查询域名所在的服务器IP)
http://ip.360.cn/IPShare/info
http://myip.com.tw/
http://ip.xianhua.com.cn/
https://www.ip.cn/
https://www.123cha.com/ip/
https://ip38.com/
http://ip.chinaz.com
https://www.taobao.com/help/getip.php(推荐,天猫和淘宝都需要使用)

 

JS获取内网IP

<script type="text/JavaScript">
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" style="display:none;"></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);
})
</script>

 

在Windows下,使用ping命令只能检查IP地址是否可达,无法检查端口是否开放。如果想要检查某个IP地址的端口是否开放,可以使用tcping工具。首先将tcping.exe文件放在C:\Windows\System32目录下,然后打开CMD窗口,输入命令:tcping 指定的IP或者域名 端口号,回车后即可查看该IP的端口是否通畅。例如:tcping 10.20.66.37 8090。\[1\] 在Linux下,可以使用telnet命令来测试端口是否畅通。具体用法是:telnet 指定的IP或者域名 端口号。例如:telnet 10.20.66.37 8090。\[2\] 需要注意的是,ping命令只能检查IP地址是否可达,无法检查端口是否开放。如果想要检查某个端口是否可以访问,需要使用其他工具或命令。\[3\] #### 引用[.reference_title] - *1* [各系统如何进行ping IP+端口](https://blog.csdn.net/qq_38119410/article/details/122977709)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [不同系统下pingIP和端口的办法汇总](https://blog.csdn.net/chenglanche9990/article/details/100987461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [如何 ping ip 加 端口](https://blog.csdn.net/qq_45878219/article/details/125600639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值