如何在javascript html5中获取本地IP地址

时间:2015-04-30 05:30:42

标签: java javascript html html5 ip

我想在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.

4 个答案:

答案 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;
}