一、JS获取IP地址
JavaScript是一种广泛使用的脚本语言,可用于在Web浏览器中编写交互式网页。在Web开发中,获取IP地址是一项非常重要的任务,因为它可以帮助开发人员确定用户的位置。在JavaScript中,可以使用以下代码来获取用户的IP地址:
function getIPAddress(onNewIP) {
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var pc = new myPeerConnection({iceServers: []}),
noop = function(){};
pc.createDataChannel("");
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(ice) {
if (ice && ice.candidate && ice.candidate.candidate) {
var myIP = ice.candidate.candidate.match(/(d{1,3}.d{1,3}.d{1,3}.d{1,3})/)[0];
onNewIP(myIP);
}
};
}
这段代码用于创建一个RTCPeerConnection对象来获取用户的IP地址。它首先检查浏览器是否支持RTCPeerConnection对象,然后创建一个新的RTCPeerConnection对象,并通过createDataChannel()函数创建一个数据通道。接下来,通过createOffer()函数创建一个offer,然后通过setLocalDescription()函数将本地SDP描述设置为这个offer。最后,当获取到一个ICE candidate时,将通过正则表达式匹配出IP地址,并通过回调函数返回IP地址。
二、JS获取IPv6地址
IPv6是下一代IP协议,可以提供更多的地址空间和更好的安全性。在JavaScript中,可以使用以下代码来获取用户的IPv6地址:
function getIPv6Address(onNewIPv6) {
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var pc = new myPeerConnection({iceServers: []}),
noop = function(){};
pc.createDataChannel("");
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(ice) {
if (ice && ice.candidate && ice.candidate.candidate) {
var myIPv6 = ice.candidate.candidate.match(/([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4}){7})/)[0];
onNewIPv6(myIPv6);
}
};
}
这段代码与获取IP地址的代码类似,但是我们需要使用不同的正则表达式来匹配IPv6地址。在这个例子中,我们使用了一个匹配IPv6地址的正则表达式:([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4}){7})。
三、JS获取IP和端口
在JavaScript中,可以使用以下代码来获取用户的IP和端口:
function getIPAndPort(onNewIPAndPort) {
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var pc = new myPeerConnection({iceServers: []}),
noop = function(){};
pc.createDataChannel("");
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(ice) {
if (ice && ice.candidate && ice.candidate.candidate) {
var myIPAndPort = ice.candidate.candidate.match(/(d{1,3}.d{1,3}.d{1,3}.d{1,3}):([0-9]+)/)[0];
onNewIPAndPort(myIPAndPort);
}
};
}
这段代码类似于获取IP地址的代码,但是我们需要对正则表达式进行改变以匹配IP和端口的组合。在这个例子中,我们使用了如下正则表达式:(d{1,3}.d{1,3}.d{1,3}.d{1,3}):([0-9]+)。
四、JS获取IP和地区
在JavaScript中,可以通过调用第三方API或使用数据库来获取用户的地理位置信息,并与获取的IP地址进行匹配。以下是使用第三方API获取IP和地区信息的代码:
function getIPAndRegion(onNewIPAndRegion) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.ipify.org?format=json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = JSON.parse(xhr.responseText);
var myIP = result.ip;
var xhr2 = new XMLHttpRequest();
xhr2.open("GET", "https://ipapi.co/" + myIP + "/json/", true);
xhr2.onreadystatechange = function() {
if (xhr2.readyState == 4 && xhr2.status == 200) {
var result2 = JSON.parse(xhr2.responseText);
var myRegion = result2.region;
onNewIPAndRegion(myIP + ", " + myRegion);
}
};
xhr2.send();
}
};
xhr.send();
}
这段代码首先使用XMLHttpRequest对象向https://api.ipify.org发送一个GET请求,以获取用户的IP地址。接下来,使用另一个XMLHttpRequest对象向https://ipapi.co发送一个GET请求,以根据IP地址获取用户的地区信息。最后,将IP地址和地区信息一起返回给回调函数。
五、JS获取IP地理位置
在JavaScript中,可以使用第三方API或自己的数据库来获取用户的地理位置信息。以下是使用第三方API获取IP地理位置的代码:
function getIPGeolocation(onNewIPGeolocation) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.ipify.org?format=json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = JSON.parse(xhr.responseText);
var myIP = result.ip;
var xhr2 = new XMLHttpRequest();
xhr2.open("GET", "https://ipapi.co/" + myIP + "/json/", true);
xhr2.onreadystatechange = function() {
if (xhr2.readyState == 4 && xhr2.status == 200) {
var result2 = JSON.parse(xhr2.responseText);
var myLocation = result2.city + ", " + result2.region_code + ", " + result2.country_name;
onNewIPGeolocation(myLocation);
}
};
xhr2.send();
}
};
xhr.send();
}
这段代码与获取IP和地区的代码类似,但是它返回了用户的地理位置信息,而不仅仅是地区信息。
六、JS获取IP地址的方法
除了使用RTCPeerConnection对象外,还可以使用其他方法来获取IP地址。以下是使用WebRTC API中的RTCDataChannel来获取IP地址的代码:
function getIPAddressWithRTCDataChannel(onNewIP) {
var pc = new RTCPeerConnection({iceServers: []}),
noop = function(){};
pc.createDataChannel("");
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(ice) {
if (ice && ice.candidate && ice.candidate.candidate) {
var myIP = ice.candidate.candidate.match(/(d{1,3}.d{1,3}.d{1,3}.d{1,3})/)[0];
onNewIP(myIP);
pc.onicecandidate = noop;
}
};
}
此外,还可以使用第三方库,如geoip2.js和ipify.js来获取IP地址、地理位置和ASN(Autonomous System Number,自治系统号)信息。以下是使用geoip2.js和ipify.js获取IP地址和地理位置的代码:
// Load the necessary libraries
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ipify/1.0.3/ipify.min.js" type="text/javascript"></script>
// Get the IP address
ipify(function(err, data) {
var myIP = data.ip;
// Get the geolocation
geoip2.city(myIP, function(result) {
var myCity = result.city.names.en;
var myRegion = result.subdivisions[0].iso_code;
var myCountry = result.country.names.en;
var myLocation = myCity + ", " + myRegion + ", " + myCountry;
onNewIPAndGeolocation(myIP + ", " + myLocation);
});
});
七、JS获取当前IP
在JavaScript中,可以使用以下代码来获取当前网络连接的IP地址:
function getCurrentIP(onNewIP) {
var myScript = document.createElement("script");
myScript.src = "https://jsonip.com/?callback=getIP";
document.body.appendChild(myScript);
window.getIP = function(json) {
onNewIP(json.ip);
};
}
这段代码通过向https://jsonip.com发送一个JSONP请求来获取当前的IP地址。
八、JS获取本机IP地址
在JavaScript中,可以通过WebSocket对象获取本地IP地址:
function getLocalIPAddress(onNewIP) {
var mySocket = new WebSocket("wss://websocket.org");
mySocket.onopen = function() {
mySocket.send("hello");
};
mySocket.onerror = function() {
onNewIP("error");
};
mySocket.onmessage = function(msg) {
mySocket.close();
var myIP = msg.data;
onNewIP(myIP);
};
}
这段代码创建一个WebSocket对象并连接到https://websocket.org。当连接打开时,它发送了一个“hello”消息,并等待接收到的消息来返回本地IP地址。请注意,这段代码要求WebSocket服务器返回客户端的IP地址。
九、JS获取本地IP
在JavaScript中,可以使用Navigator对象获取本地IP地址:
function getLocalIPAddressWithNavigator(onNewIP) {
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var pc = new RTCPeerConnection({iceServers:[]}),
noop = function(){};
pc.createDataChannel("");
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(ice) {
if (!ice || !ice.candidate)
return;
var myIP = /^candidate:.+ (\S+) \d+ typ/.exec(ice.candidate.candidate)[1];
onNewIP(myIP);
pc.onicecandidate = noop;
};
}
这段代码使用Navigator对象和RTCPeerConnection对象来获取本地IP地址。它首先检查浏览器是否支持RTCPeerConnection对象,然后创建一个新的RTCPeerConnection对象,并通过createDataChannel()函数创建一个数据通道。接下来,通过createOffer()函数创建一个offer,然后通过setLocalDescription()函数将本地SDP描述设置为这个offer。最后,当获取到一个ICE candidate时,将使用正则表达式获取本地IP地址,并通过回调函数返回IP地址。