【问题标题】:How to get local IP address in javascript html5如何在javascript html5中获取本地IP地址
【发布时间】:2015-07-09 16:21:59
【问题描述】:

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

【问题讨论】:

标签: java javascript html ip


【解决方案1】:

来自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);
});

【讨论】:

  • 这在 IE 上不起作用。它说不支持对象。 IE中有对应的吗?我真的需要这个来查找本地机器 ip。
  • 这似乎可以在 Chrome 中找到,但在 Firefox、IE 和 EDGE 中失败。
【解决方案2】:

我认为 javascript 标准库中没有主机或 IP 地址的概念。所以你必须访问一些外部服务来为你查找主机名。

除非您可能想向服务器发送请求,该服务器会返回您的主机 IP 地址!

编辑

在 JSP 中,您可以使用来自 HttpServletRequestgetRemoteHost() 方法

获取用户的IP地址。

所以你可以这样写 -

var ip = '<%=request.getRemoteHost();%>'; 

^^ 上面一行是 JSP 代码,这应该是您从 java servlet 容器(如 tomcat)返回的 JSP 文件的一部分。这在静态 HTML 页面中不起作用。

【讨论】:

  • 你能解释一下怎么做吗
  • 为什么不呢?它说什么??
  • 我想在我的 javascript 中获取 IP,然后想将该 IP 传递给进一步运行。所以我在我的java脚本中写了这样var ip = '&lt;%=request.getRemoteHost();%&gt;'; 。但它需要&lt;%=request.getRemoteHost();%&gt;作为一个值
  • 对不起,我忘了提。该代码应该在 JSP 文件中,并且您应该从服务器返回该 JSP 文件。它在静态 HTML 页面中不起作用。 &lt;%=request.getRemoteHost();%&gt; 是 JSP 代码
  • 它返回主机IP地址。你能告诉我如何获取调用url的本地机器的IP地址吗?
【解决方案3】:

下面用 C 语言编写的 cgi 返回环境参数列表,其中包括 REMOTE_ADDR。它构成了任何 HTML 页面的基础,前提是在 HTTP 服务器(例如 Apache2)中启用了 cgi。

只需在您的目录 /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 //////////////////////////////

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

    • OP 已经明确提到不能使用外部链接! I do not want to use any link to get the IP.
    • @ᴀʀᴜn BᴇrtiL 是的,codeMan 是对的我在我的问题中提到我不想使用任何外部链接
    • Javascript 没有自 IP 的概念,因此您必须使用一些外部资源,即使那是同一台机器上的另一个脚本语言文件。
    • api.hostip.info 已失效。
    猜你喜欢
    • 2014-06-26
    • 2012-05-31
    • 2021-01-28
    • 2011-03-17
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    相关资源
    最近更新 更多