javascript - 我可以在不使用外部服务的情况下在 Chrome 应用程序中获取我的 IP 地址吗?

标签 javascript sockets google-chrome google-chrome-app

我正在构建一个 chrome app并通过chrome socket api创建了一个UDP套接字 .

有没有办法在不使用外部服务的情况下检索您自己的IP 地址? 我所说的“自己的 IP 地址”的意思是:客户端服务器都位于同一网络上。 chrome 应用需要使用自己的本地 IP 地址响应 UDP 广播

实际上有一个chrome socket API正是针对该用例。但不幸的是我只收到以下回调对象:Object {paused: false, permanent: false, socketId: 17},它缺少localAddress属性。根据 documentation,它是 SocketInfo 对象中的一个(可选) 属性。 。这本质上是我正在运行的代码:

chrome.sockets.udp.create({}, function(socketInfo){
    chrome.sockets.udp.getInfo(socketInfo.socketId, function (detailedInfo){
        ipAddress = detailedInfo.localAddress;
        console.debug(detailedInfo); // containts no `localAddress`
    });
});

我也不认为我遗漏了任何manifest-permissions因为 API documentation 中没有描述特殊权限。这是我使用的:

"sockets": {
  "udp": {
    "send": "*",
    "bind": "*"
  }
}

当我使用Python时,我可以实现该目标,如下所示:

import socket
ip_address = socket.gethostbyname(socket.gethostname())

任何帮助都会很棒!

最佳答案

事实证明我使用了错误的 API。对于我的用例,我需要使用 chrome.system.network.getNetworkInterfaces .

这将返回所有接口(interface)及其IP 地址的数组。

这是我的示例代码:

chrome.system.network.getNetworkInterfaces(function(interfaces){
    console.log(interfaces);
});

list 权限:

"permissions": [
  "system.network"
],

考虑到这些评论,提供完美的解决方案并不容易,因为必须找到 UDP 端口的正确接口(interface)。

此时,完美匹配接口(interface)的唯一方法必须为 getNetworkInterfaces 给出的所有接口(interface)绑定(bind)所有地址。然后您就可以准确地知道使用哪个接口(interface)来接收调用,并且可以使用正确的 IP 地址进行响应。

关于javascript - 我可以在不使用外部服务的情况下在 Chrome 应用程序中获取我的 IP 地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533631/

相关文章:

c - 心脏出血错误 : Why is it even possible to process the heartbeat request before the payload is delivered?

javascript - Rails 前端的最佳实践是什么?

javascript - Phonegap/JQueryMobile 应用程序构建丢失样式

Python `socket.getaddrinfo` 需要 5 秒大约 0.1% 的请求

javascript - 运行 tabs.executeScript : The tab was closed 时未经检查的 runtime.lastError

html - 在非默认浏览器中打开 HTML 文件

google-chrome - 如何将 VSCode 调试器附加到 Brave 浏览器?

javascript - v8 JavaScript 函数执行在 Runtime_TryInstallOptimizedCode 中挂起

javascript - 尝试使用 jQuery 创建显示/隐藏切换内容?

linux - TCP SYN/SYN ACK 的 IP header 中的 Dscp 值