如何在javascript html5中获取本地IP地址
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/29959708/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to get local IP address in javascript html5
提问by rachana
I want to get Ip address of my machine in javascript which is further refer in my html page. I have refer all the suggested links but I do not get any answer. I do not want to use any link to get the IP so i tried with following line of code in my javascript
我想在 javascript 中获取我机器的 Ip 地址,这在我的 html 页面中进一步引用。我已经参考了所有建议的链接,但没有得到任何答案。我不想使用任何链接来获取 IP,所以我尝试在我的 javascript 中使用以下代码行
var ip = '<%=request.getRemoteAddr();%>';
or
或者
var ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
var ip = Request.UserHostAddress.ToString();
But do not get the result.
但是没有得到结果。
Please help me to get the solution.I want to include this javascript in my html page and I do not want to use any link to get the IP.
请帮我找到解决方案。我想在我的 html 页面中包含这个 javascript,我不想使用任何链接来获取 IP。
All the links I have gone through gives the external links to get the IP address and I do not want to use any external link to get the IP.
All the links I have gone through gives the external links to get the IP address and I do not want to use any external link to get the IP.
采纳答案by codeMan
I dont think that there is a notion of hosts or ip-addresses in the javascript standard library. So you'll have to access some external service to look up hostnames for you.
我认为 javascript 标准库中没有主机或 IP 地址的概念。所以你必须访问一些外部服务来为你查找主机名。
Unless you might want to send a request to the server which returns you the host IP address!!
除非您可能想向服务器发送请求,该请求会返回主机 IP 地址!!
EDIT
编辑
In JSP you you can use getRemoteHost()method from HttpServletRequest
在 JSP 中,您可以使用HttpServletRequest 中的getRemoteHost()方法
to get the IP address of the user.
获取用户的IP地址。
So you can write something like this -
所以你可以写这样的东西 -
var ip = '<%=request.getRemoteHost();%>';
^^ the above line is JSP code, this should be part of the JSP file that you return from java servlet container like a tomcat. This does not work in static HTML pages.
^^ 上一行是 JSP 代码,这应该是您从 java servlet 容器(如 tomcat)返回的 JSP 文件的一部分。这在静态 HTML 页面中不起作用。
回答by Arun Bertil
Try the following code
试试下面的代码
function myIP() {
if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("GET","http://api.hostip.info/get_html.php",false);
xmlhttp.send();
hostipInfo = xmlhttp.responseText.split("\n");
for (i=0; hostipInfo.length >= i; i++) {
ipAddress = hostipInfo[i].split(":");
if ( ipAddress[0] == "IP" ) return ipAddress[1];
}
return false;
}
回答by Jordan Kanchelov
Given from hereyou can do that.
鉴于从这里你可以做到这一点。
/**
* Get the user IP throught the webkitRTCPeerConnection
* @param onNewIP {Function} listener function to expose the IP locally
* @return undefined
*/
function getUserIP(onNewIP) { // onNewIp - your listener function for new IPs
//compatibility for firefox and chrome
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var pc = new myPeerConnection({
iceServers: []
}),
noop = function() {},
localIPs = {},
ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
key;
function iterateIP(ip) {
if (!localIPs[ip]) onNewIP(ip);
localIPs[ip] = true;
}
//create a bogus data channel
pc.createDataChannel("");
// create offer and set local description
pc.createOffer().then(function(sdp) {
sdp.sdp.split('\n').forEach(function(line) {
if (line.indexOf('candidate') < 0) return;
line.match(ipRegex).forEach(iterateIP);
});
pc.setLocalDescription(sdp, noop, noop);
}).catch(function(reason) {
// An error occurred, so handle the failure to connect
});
//listen for candidate events
pc.onicecandidate = function(ice) {
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
};
}
// Usage
getUserIP(function(ip){
alert("Got IP! :" + ip);
});
回答by Erick Ringot
The cgi, written in C-language bellow, returns the list of the environment parameters, among them REMOTE_ADDR. It constitutes a base for any HTML page, providing cgi are enabled in the HTTP server (Apache2 for instance).
用下面的 C 语言编写的 cgi 返回环境参数列表,其中包括 REMOTE_ADDR。它构成了任何 HTML 页面的基础,提供在 HTTP 服务器(例如 Apache2)中启用的 cgi。
Just compile the source in your directory /cgi/bin and call it from your browser.
只需在您的目录 /cgi/bin 中编译源代码并从您的浏览器中调用它。
/* -----------------------------------------------------
ENVVARS.C
A simple program in C designed for working
in a CGI context - print the environment
variables.
-------------------------------------------------- */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// m a i n
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int main(int argc, char **argv, char **env)
{
char **pe;
printf("Content-type: text/html\n\n"
"<html>"
"<head>"
"<title>ENVVARS</title>"
"<body>"
"<h1>ENVVARS</h1>"
"<h3>My pid is: %d</h3>\n",getpid());
printf("<ul>");
for (pe=env; pe && *pe; pe++) printf("<li>%s<//li>\n",*pe);
printf("</ul>");
printf("</body></html>");
return 0;
} // end main
//////////////////// EOF //////////////////////////////