私はWebアプリケーションを作成しています。実行するためには、デバイスを「登録済み」にする必要があります。登録プロセスでは、使用するデバイスのIPv4アドレスをデータベースを更新するフィールドに入力します。
アプリケーションにアクセスするときは、window.webkitRTCPeerConnection
またはwindow.mozRTCPeerConnection
をチェックしてIPアドレスを取得します。これはChromeとFirefoxの最新バージョンで動作しますが、IEでは動作しません。したがって、IPがRTCPeerConnectionチェックから取得されなかった場合は、ActiveXを使用する必要がありました。
私の問題は、Safariにアプリケーションを実行させたいのですが、Safariを実行しているデバイスのIPv4アドレスを取得する方法については何も見つかりません。
明確にするために、このWebアプリケーションは公開されていないため、アプリケーションを実行しているデバイスにインストールされているものを完全に制御できます。 (それは私のActiveXの使用の正当性です)。
どのように私がそのようなことをすることができるかについての示唆および/または参考になります。SafariでJavaScriptを使用してIPv4アドレスを取得
0
A
答えて
0
このAPIはあなたのIPアドレスを取得できます。
より高度なソリューション: http://dev.maxmind.com/geoip/geoip2/javascript/
この1つはまた、これによると、Safariのをサポートしています。http://dev.maxmind.com/geoip/geoip2/javascript/#Browser_Support
最後のものは、私の意見では最高の一つです。私は私のプロジェクトの1つを使っています。
EDIT: SafariではWebRTC接続はサポートされていません。したがって、サファリでローカルIPアドレスを取得することはできません。
0
この方法を試してください。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<h4>
Demo for:
<a href="https://github.com/diafygi/webrtc-ips">
https://github.com/diafygi/webrtc-ips
</a>
</h4>
<p>
This demo secretly makes requests to STUN servers that can log your
request. These requests do not show up in developer consoles and
cannot be blocked by browser plugins (AdBlock, Ghostery, etc.).
</p>
<h4>Your local IP addresses:</h4>
<ul></ul>
<h4>Your public IP addresses:</h4>
<ul></ul>
<h4>Your IPv6 addresses:</h4>
<ul></ul>
<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
<script>
//get the IP addresses associated with an account
function getIPs(callback){
var ip_dups = {};
//compatibility for firefox and chrome
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
var useWebKit = !!window.webkitRTCPeerConnection;
//bypass naive webrtc blocking using an iframe
if(!RTCPeerConnection){
//NOTE: you need to have an iframe in the page right above the script tag
//
//<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
//<script>...getIPs called in here...
//
var win = iframe.contentWindow;
RTCPeerConnection = win.RTCPeerConnection
|| win.mozRTCPeerConnection
|| win.webkitRTCPeerConnection;
useWebKit = !!win.webkitRTCPeerConnection;
}
//minimal requirements for data connection
var mediaConstraints = {
optional: [{RtpDataChannels: true}]
};
var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
//construct a new RTCPeerConnection
var pc = new RTCPeerConnection(servers, mediaConstraints);
function handleCandidate(candidate){
//match just the IP address
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
var ip_addr = ip_regex.exec(candidate)[1];
//remove duplicates
if(ip_dups[ip_addr] === undefined)
callback(ip_addr);
ip_dups[ip_addr] = true;
}
//listen for candidate events
pc.onicecandidate = function(ice){
//skip non-candidate events
if(ice.candidate)
handleCandidate(ice.candidate.candidate);
};
//create a bogus data channel
pc.createDataChannel("");
//create an offer sdp
pc.createOffer(function(result){
//trigger the stun server request
pc.setLocalDescription(result, function(){}, function(){});
}, function(){});
//wait for a while to let everything done
setTimeout(function(){
//read candidate info from local description
var lines = pc.localDescription.sdp.split('\n');
lines.forEach(function(line){
if(line.indexOf('a=candidate:') === 0)
handleCandidate(line);
});
}, 1000);
}
//insert IP addresses into the page
getIPs(function(ip){
var li = document.createElement("li");
li.textContent = ip;
//local IPs
if (ip.match(/^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/))
document.getElementsByTagName("ul")[0].appendChild(li);
//IPv6 addresses
else if (ip.match(/^[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}$/))
document.getElementsByTagName("ul")[2].appendChild(li);
//assume the rest are public IPs
else
document.getElementsByTagName("ul")[1].appendChild(li);
});
</script>
</body>
</html>
+0
これは悲しいことにSafariでは機能しなかった。私は既にRTCPeerConnectionを使用しようとしたが、SafariのChromeとFirefoxと同様に動作しない。 – Nathangrad
これは本当に良いようだが、それはむしろ私がいる探していると、デバイス(192.168.x.x)のローカルアドレスであるよりも、パブリックIPアドレスを取得します。 – Nathangrad
回答が更新されました。 – Red
私は既にChromeとFirefoxでうまく動作するRTCPeerConnectionを使ってみました。しかし、悲しいことにSafariではうまくいきませんので、私はこの方法を使えません。 – Nathangrad