使用js如何判断内网还是外网环境
时间: 2023-12-12 08:05:59 浏览: 166
可以使用 JavaScript 中的 `window.location` 对象来获取当前页面的 URL,然后判断其主机名(hostname)部分是否为内网主机名。如果主机名为内网主机名,则可以认为当前环境为内网环境。
以下是一段示例代码:
```javascript
var hostname = window.location.hostname;
if (hostname.indexOf('192.168.') === 0 || hostname.indexOf('10.') === 0 || hostname.indexOf('172.') === 0) {
console.log('当前环境为内网环境');
} else {
console.log('当前环境为外网环境');
}
```
其中,`indexOf()` 方法用于判断字符串是否包含指定的子字符串。如果返回值为 0,表示该字符串以指定的子字符串开头。因此,`hostname.indexOf('192.168.') === 0` 表示主机名以 `192.168.` 开头,即为内网主机名。类似地,`hostname.indexOf('10.') === 0` 和 `hostname.indexOf('172.') === 0` 分别表示主机名以 `10.` 或 `172.` 开头,也是内网主机名的一种常见情况。
相关问题
vue2 内网和外网加载资源不同,如何区分
在Vue2中,可以通过判断当前环境来区分内网和外网加载资源。下面是一种常见的区分方式:
1. 在项目的根目录下,创建一个config.js或.env文件,用于保存项目的环境配置信息。在该文件中,可以定义一个名为NODE_ENV的变量,用来表示当前环境是开发环境还是生产环境。例如,将NODE_ENV定义为development表示开发环境,将其定义为production表示生产环境。
2. 在项目中,可以通过引入这个配置文件来获取当前环境的值。例如,在主要的Vue实例文件(如main.js)中,可以这样引入和使用配置文件:
```javascript
import config from './config.js'
//获取当前环境
const currentEnv = config.NODE_ENV
//根据当前环境加载不同的资源
if(currentEnv === 'development') {
//加载内网资源
} else if(currentEnv === 'production') {
//加载外网资源
}
```
3. 在加载资源的时候,可以根据当前环境来动态选择加载不同的资源。例如,可以使用Vue的异步组件(Async Component)功能来实现动态加载资源。在异步组件中,可以根据环境的不同,切换加载内网或外网资源。代码示例如下:
```javascript
Vue.component('MyComponent', function(resolve, reject) {
if(currentEnv === 'development') {
//加载内网资源
import('./components/InternalComponent.vue').then(component => {
resolve(component)
})
} else if(currentEnv === 'production') {
//加载外网资源
import('./components/ExternalComponent.vue').then(component => {
resolve(component)
})
}
})
```
通过以上的方式,我们可以根据当前的环境配置来动态加载不同的资源,从而区分内网和外网加载资源。这样可以在开发过程中更好地管理和调试内网和外网的差异。
判断内网请求的时候内网的后端IP 外网请求就是外网的IP 前端代码实现
在前端实现判断内网请求和外网请求需要借助浏览器提供的 API,比如 WebRTC API。下面是一个简单的示例代码:
```javascript
function getIPs(callback){
var ip_dups = {};
//compatibility for firefox and chrome
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
var useWebKit = !!window.webkitRTCPeerConnection;
//bypass naive webrtc blocking using an iframe
if(!RTCPeerConnection){
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);
var win = iframe.contentWindow;
window.RTCPeerConnection = win.RTCPeerConnection;
window.mozRTCPeerConnection = win.mozRTCPeerConnection;
window.webkitRTCPeerConnection = win.webkitRTCPeerConnection;
RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
useWebKit = !!window.webkitRTCPeerConnection;
}
//minimal requirements for data connection
var mediaConstraints = {
optional: [{RtpDataChannels: true}]
};
var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
//construct a new RTCPeerConnection
var pc = new RTCPeerConnection(servers, mediaConstraints);
function handleCandidate(candidate){
//match just the IP address
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
var ip_addr = ip_regex.exec(candidate)[1];
//remove duplicates
if(ip_dups[ip_addr] === undefined)
callback(ip_addr);
ip_dups[ip_addr] = true;
}
//listen for candidate events
pc.onicecandidate = function(ice){
//skip non-candidate events
if(ice.candidate){
//match just the IP address
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
var ip_addr = ip_regex.exec(ice.candidate.candidate)[1];
//remove duplicates
if(ip_dups[ip_addr] === undefined)
handleCandidate(ice.candidate.candidate);
ip_dups[ip_addr] = true;
}
};
//create a bogus data channel
pc.createDataChannel("");
//create an offer sdp
pc.createOffer(function(result){
//trigger the stun server request
pc.setLocalDescription(result, function(){}, function(){});
}, function(){});
//wait for a while to let everything done
setTimeout(function(){
//read candidate info from local description
var lines = pc.localDescription.sdp.split('\n');
lines.forEach(function(line){
if(line.indexOf('a=candidate:') === 0)
handleCandidate(line);
});
}, 1000);
}
//调用 getIPs 方法获取本机IP
getIPs(function(ip){
console.log(ip);
// TODO: 根据IP判断是内网请求还是外网请求
});
```
在上述代码中,`getIPs` 方法使用 WebRTC API 获取本机的 IP 地址,然后通过判断 IP 地址的前缀来判断请求是内网请求还是外网请求。具体的实现细节需要根据实际情况进行调整。