如何在LAN上找到另一台无法公开访问的计算机的正确IP地址?

时间:2011-07-02 06:57:08

标签: java networking tcp p2p nat-traversal

我正在编写一个分布式Java应用程序,但网络方面的事情让我很难过。由于某种原因,它无法正常工作。我认为这是因为我通过ipconfig / all获得的IP地址无法从局域网外部访问。我感谢任何提示或建议。

2 个答案:

答案 0 :(得分:3)

概述

您需要通常所说的"NAT Traversal"ICE。今天互联网上使用了两种主要协议TCP和UDP。 TCP套接字在其中携带大量的会话状态信息;因此,用于P2P的协议比UDP要困难得多。

UDP隧道

以下列表是您可以用来实现基于UDP NAT遍历的P2P服务的更一般STUN Protocol (RFC 5389)的简化大纲......

  1. 部署具有公共地址的UDP服务器,并开始侦听来自客户端的UDP数据包。客户端将其私有IP地址嵌入发送到您服务器的UDP数据包中;最好是实施某种形式的身份验证,以确保您从有效的客户端(而不是一些随机数据包扫描程序)获得连接。
  2. 服务器读取如何将其私有IP地址从UDP数据报转换为公共IP地址。
  3. 如果要在特定用户之间建立连接,还要将此信息嵌入从客户端发送到服务器的数据包中;您的服务器将实现一个用户名目录,以将客户端UDP套接字信息与用户名相关联(对等端将尝试连接)。
  4. 您的UDP服务器应将相应的信息发送回其他相关的对等方。
  5. 现在,对等体可以通过将UDP数据报发送到这些已翻译的地址来直接通信;只要允许的UDP端口允许这些数据包通过路径中的客户端NAT设备,并且此协议引入的延迟不会触发NAT设备中的状态超时。
  6. 建立UDP连接后,可以使用OpenVPN等方式在两个客户端之间形成UDP SSL VPN;这将为您提供一个简单的通道来启动客户端之间的TCP连接。但是,在此连接模型中需要考虑非平凡的安全性和信任问题;它不太可能在互联网上的随机用户之间有用。

    TCP

    如果需要TCP连接,我建议查看此互联网草案,MMUSIC-ICE-TCP:TCP Candidates with Interactive Connectivity Establishment (ICE)

答案 1 :(得分:2)

某些IP地址不可路由:http://en.wikipedia.org/wiki/IP_address - 如果你有其中一个,你将无法直接从局域网外部访问它。您可以从该局域网上的其他地址访问您的局域网上的其他地址。

如果您在局域网之外,则无法启动到局域网上特定计算机的TCP连接,但该计算机可以随身携带:http://en.wikipedia.org/wiki/Network_address_translator