我正在构建一个 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/