简体   繁体   English

如何在JavaScript HTML5中获取本地IP地址

[英]How to get local IP address in javascript html5

I want to get Ip address of my machine in javascript which is further refer in my html page. 我想在javascript中获取我的机器的IP地址,该地址在我的html页面中进一步引用。 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 我不想使用任何链接来获取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. 请帮助我获得解决方案。我想将此javascript包含在我的html页面中,并且我不想使用任何链接来获取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.

Given from here you 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);
});

I dont think that there is a notion of hosts or ip-addresses in the javascript standard library. 我认为javascript标准库中没有主机或ip地址的概念。 So you'll have to access some external service to look up hostnames for you. 因此,您必须访问一些外部服务才能为您查找主机名。

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. ^^上一行是JSP代码,它应该是您从Java servlet容器(例如tomcat)返回的JSP文件的一部分。 This does not work in static HTML pages. 这在静态HTML页面中不起作用。

The cgi, written in C-language bellow, returns the list of the environment parameters, among them REMOTE_ADDR. 用C语言编写的cgi会返回环境参数的列表,其中包括REMOTE_ADDR。 It constitutes a base for any HTML page, providing cgi are enabled in the HTTP server (Apache2 for instance). 它构成任何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 //////////////////////////////

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM