我正在尝试使用 JavaScript 查找一些代码示例来查询 STUN 服务器以获取我的公共 IP 和端口。也许使用服务器
虽然此处解释了 STUN 规范http://www.ietf.org/rfc/rfc3489.txt(这是一个很长的文档,显然我不希望您阅读它),但我一直无法找到任何代码示例完全没有,这会让我的生活更轻松。就像是
function getMyIPAndPort() {
//query stun server for it
}
谢谢
我正在尝试使用 JavaScript 查找一些代码示例来查询 STUN 服务器以获取我的公共 IP 和端口。也许使用服务器
虽然此处解释了 STUN 规范http://www.ietf.org/rfc/rfc3489.txt(这是一个很长的文档,显然我不希望您阅读它),但我一直无法找到任何代码示例完全没有,这会让我的生活更轻松。就像是
function getMyIPAndPort() {
//query stun server for it
}
谢谢
你可以获得本地和外部IP
function determineIPs() {
const pc = new RTCPeerConnection({ iceServers: [ {urls: 'stun:stun.l.google.com:19302'} ] });
pc.createDataChannel('');
pc.createOffer().then(offer => pc.setLocalDescription(offer))
pc.onicecandidate = (ice) => {
if (!ice || !ice.candidate || !ice.candidate.candidate) {
console.log("all done.");
pc.close();
return;
}
let split = ice.candidate.candidate.split(" ");
if (split[7] === "host") {
console.log(`Local IP : ${split[4]}`);
} else {
console.log(`External IP : ${split[4]}`);
}
};
}
determineIPs();
例如https://jsbin.com/zosayiyidu/1/edit?js,console
STUN 服务器用于外部 IP。确保您没有使用任何阻止访问 stun:stun.l.google.com:19302 的代理或使用不同的 STUN 服务器
很晚的答案。看看这个迷你项目:https ://diafygi.github.io/webrtc-ips/
它确实为您提供了 IP,但似乎没有提供端口。但是,如果您查看这些行://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];
他们似乎删除了端口。我不确定,但你可以用它来找出答案。
我还检查了项目(https://diafygi.github.io/webrtc-ips),即使它是一个很棒的脚本,我也不太喜欢。我的意思是,原因是它假设哪些 IP 是公共的和私有的。如果 IP 不是 10/8、172.16/12 或 192.168/16,则它是公共 IPv4。这并非总是如此。您可以(不幸地)在您的 LAN 中拥有其他范围的 IPv4 地址并对其进行 NAT。这个思路是获取STUN Server返回的IP地址,不是假设。
问候,