我想在javascript中获取我的机器的IP地址,这在我的html页面中进一步参考。 我已经提到了所有建议的链接,但我没有得到任何答案。 我不想使用任何链接来获取IP,所以我尝试使用我的javascript中的以下代码行
var ip = '<%=request.getRemoteAddr();%>';
或
var ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
var ip = Request.UserHostAddress.ToString();
但是不要得到结果。
请帮助我获得解决方案。我想在我的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.
答案 0 :(得分:3)
我不认为javascript标准库中存在主机或IP地址的概念。因此,您必须访问一些外部服务才能为您查找主机名。
除非您可能要向服务器发送请求,该服务器返回主机IP地址!!
修改强>
在JSP中,您可以使用getRemoteHost()
中的HttpServletRequest方法获取用户的IP地址。
所以你可以写这样的东西 -
var ip = '<%=request.getRemoteHost();%>';
^^上面的行是JSP代码,这应该是你从java servlet容器返回的JSP文件的一部分,就像tomcat一样。这在静态HTML页面中不起作用。
答案 1 :(得分:3)
从here给出你可以做到的。
/**
* 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);
});
答案 2 :(得分:0)
用C语言编写的cgi会返回环境参数的列表,其中包括REMOTE_ADDR。只要在HTTP服务器(例如Apache2)中启用了cgi,它就构成了任何HTML页面的基础。
只需在目录/ 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 //////////////////////////////
答案 3 :(得分:-4)
尝试以下代码
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;
}