<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>获取ip</title>
</head>
<body>
<script src="https://pv.sohu.com/cityjson?ie=utf-8"></script>
<script src="/js/public/jquery.js"></script>
<script type="text/javascript">
$(function(){
//获取外网ip方式1:搜狐
getIpBysouhu();
//获取外网ip方式2:ipify
getIpByIpify();
//获取内网ip方式1:
getIP();
});
//获取外网ip方式1:搜狐
function getIpBysouhu(){
console.log("---cip---"+returnCitySN["cip"]);
console.log("---cid---"+returnCitySN["cid"]);
console.log("---cname---"+returnCitySN["cname"]);
}
//获取外网ip方式2:ipify
function getIpByIpify(){
$.ajax({
url : "https://api.ipify.org/?format=json",
type : "GET",
data : {},
dataType : "json",
success : function(result) {
console.log("---ip---"+result.ip);
},
error : function(){
}
});
}
//获取内网ip方式1:
function getIP() {
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];
console.log("---ip(内)---"+ip_isMatch);
if (!recode[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);
}
</script>
</body>
</html>
原文:https://www.cnblogs.com/goatherd/p/10931294.html