从node.js中的客户端了解本地ip服务器

时间:2015-04-18 18:13:38

标签: javascript node.js socket.io

我有一个Node.js服务器,客户端是一个移动应用程序。我想知道哪个是了解服务器本地ip的最佳方法。我的意思是......

服务器在localhost:8080中运行,客户端必须连接到服务器,如192.168.0.107:8080(pc的本地IP)。

我想访问此IP,192.168.0.107而不在客户端代码中写入,因为它可能会更改。

5 个答案:

答案 0 :(得分:2)

我的猜测是你有一台带有动态IP的服务器,你想要将你的客户端连接到这个IP而不用硬编码到客户端的代码。我说有很多选择:

  • 设置DNS,以便连接到已知的主机名,然后将其转换为DNS服务器的IP。
  • 使用您广告联盟的广播地址实施/使用发现服务。 (服务器可以定期向广播IP广播信息,然后您的客户端将收到此信息并使用它向用户显示可用服务器列表)
  • 让客户端有一个输入框,他可以输入IP地址(这是最简单的方法,只需要一个人输入IP地址,也许保存地址以备将来自动完成等)。

答案 1 :(得分:1)

恕我直言,这是不可能以一种非常可靠的方式。这有几个原因,包括:

  • 服务器可能有多个IP,例如多个网络适配器。
  • 服务器具有IPv4和IPv6地址。
  • ...

所以要么你需要缩小你想要达到的目标,要么你必须忍受某种不确定性。

最简单的方法是使用主机名进行DNS查找,以获取众所周知的IP地址,然后选择其中一个(但是你想要这样做,这取决于你)。

PS:我不完全确定我真的有你的问题。如果我理解正确,你想在客户端找到客户端的IP地址,因为你需要将它发送到服务器,对吗?

答案 2 :(得分:0)

如果你正在寻找一个简单的答案,有一个npm模块为你做这个,它真的很小,所以只需安装它并使用说明来获取客户端的IP:

https://www.npmjs.com/package/request-ip

使用入门:

var requestIp = require('request-ip');

// inside middleware handler 
var ipMiddleware = function(req, res, next) {
    var clientIp = requestIp.getClientIp(req); // on localhost > 127.0.0.1 
    next();
};

答案 3 :(得分:0)

根据您实际实施的网络拓扑详细信息(不包含在您的问题中),您至少有三种不同的选择:

服务器直接使用Public Interent

在公共网络(例如开放互联网)上,DNS是此类问题的正常答案。您可以按照以下步骤操作:

  1. 确保您拥有公共IP地址。您可能知道或不知道192.168.0.107不是公共IP地址。这是一个本地互联网地址,不能在开放的公共互联网上路由。

  2. 使用DNS服务,创建一个DNS记录,在主机名之间建立链接,例如" google.com"和您的公共IP地址。

  3. 将客户端编码为连接到您的"名称",而不是您的IP地址。


  4. 仅限专用网络上的服务器和移动应用

    如果您的移动应用仅在您的专用网络上运行(可能通过WiFi),那么您可以在专用网络上配置自己的DNS服务器,该服务器与上述步骤基本相同,但适用于私人地址比如你私人网络上的192.168.0.107


    服务器位于家庭网络上,想要从Internet访问

    如果您的服务器位于您的专用网络中(因此只有一个私有IP地址),但您希望能够从公共网络访问它,那么您需要在此处配置某种路由或端口转发。您的专用网络和公共网络之间的边界。在家庭路由器的情况下,这将涉及以下步骤:

    1. 获取家庭网络连接的公共IP地址。
    2. 在开放互联网上为该IP地址设置公共DNS条目。
    3. 如果您的公共IP地址不是静态IP地址(例如,它可能会随着时间而改变),那么您可以使用其中一个动态DNS"为这种情况建立的服务。
    4. 在您的家庭路由器上,配置端口转发,以便在您的Web服务器运行的端口(通常是端口80)上来自Internet的传入请求,或转发到您家庭网络上实际node.js服务器的专用IP地址

答案 4 :(得分:0)

我得到了你的问题, 您的客户端具有私有和动态IP,因为它位于某些NAT(即防火墙)之后, 移动应用程序可以请求某些STUN服务器获取其公共IP和端口,然后移动应用程序可以将这些数据发送到服务器以标识客户端。与点对点连接建立类似。 enter image description here

Read more...