如何使用JavaScript查询STUN服务器以获取公共IP和端口
How to query a STUN server with JavaScript to get public IP and Port?
我试图找到一些代码示例来查询STUN服务器以获取我的公共IP和端口,使用JavaScript。可能使用
处的服务器http://www.stunserver.org虽然这里解释了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,控制台
表示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。这并不总是正确的。你可以(不幸的是)有一个其他范围的IPv4地址在你的局域网和NAT。这个想法是获取STUN服务器返回的IP地址,而不是假设它。
认为,
- 从远程脚本获取用户IP
- Java/Javascript-从客户端获取ip
- 在JS中获取当前IP(无第三方服务)
- 获取docker容器中运行的节点应用程序的IP地址
- 我尝试使用我的本地js文件来获取远程IP数据,但它不起作用
- 获取客户端机器's使用Asp/Javascript的精确IP地址(非公共IP)
- 如何从Adobe Interactive表单中获取客户端机器的IP地址
- 从服务提供商 IP 地址获取设备 IP 地址
- 我们如何使用 jQuery 通过 IP 地址获取国家/地区名称
- Nodejs,Express - 尝试从请求对象获取客户端 IP - 显示 127.0.0.1
- 正则表达式在括号和方括号之间获取 ip
- 有没有一种可靠的方法来获取用户的IP,尽管他们位于代理或类似机构后面
- 获取没有服务器端语言的 IP 地址
- PHP 作为 JavaScript:获取用户 IP
- 在节点.js websocket 连接 (socket.io) 中获取客户端的 IP
- 获取频道中的消息数,而无需在 Twilio IP 消息传递中检索它们
- GoogleMaps和GeoIP:从IP获取Lat、Long并绘制地图
- 如何在谷歌地图中通过ip获取城市名称
- 使用客户端的IP获取内容
- 从客户端IP获取XML提要