【问题标题】:How would I locate the correct IP address of another computer on my LAN which is not publicly accessible?如何在我的局域网上找到另一台不可公开访问的计算机的正确 IP 地址?
【发布时间】:2011-09-27 04:30:15
【问题描述】:

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

【问题讨论】:

  • 您可能还想在 ServerFault 上问这个问题。
  • @Tim,这个问题很好解决,适合Stack Overflow
  • 好的,复制粘贴很容易,谢谢!

标签: java networking tcp p2p nat-traversal


【解决方案1】:

概述

您需要众所周知的"NAT Traversal"ICE。目前互联网上使用的主要协议有两种,TCP 和 UDP。 TCP 套接字在其中携带大量会话状态信息;因此它是一个比 UDP 更难用于 P2P 的协议。

UDP 隧道

以下列表是更通用的STUN Protocol (RFC 5389) 的简化大纲,您可以使用它来实现基于 UDP NAT Traversal 的 P2P 服务...

  1. 部署具有公共地址的 UDP 服务器并开始侦听来自客户端的 UDP 数据包。客户端会将其私有 IP 地址嵌入发送到您的服务器的 UDP 数据包中;实施某种形式的身份验证以确保您从有效的客户端(而不是一些随机数据包扫描器)获取连接是个好主意。
  2. 服务器从 UDP 数据报中读取他们的私有 IP 地址是如何转换为公共 IP 地址的。
  3. 如果您想在特定用户之间建立连接,也可以将此信息嵌入从客户端发送到您的服务器的数据包中;您的服务器将实现一个用户名目录,以将客户端 UDP 套接字信息与用户名相关联(对等方将尝试连接到该用户名)。
  4. 您的 UDP 服务器应将相应信息发送回其他相关对等方。
  5. 现在,对等方可以通过向这些已转换地址发送 UDP 数据报直接通信;只要允许相关的 UDP 端口并且此协议引入的延迟不会触发 NAT 设备中的状态超时,这些数据包就会通过路径中的客户端 NAT 设备。

在您建立 UDP 连接之后,您可以使用 OpenVPN 之类的东西在两个客户端之间形成一个 UDP SSL VPN;这将为您提供一个简单的通道来启动客户端之间的 TCP 连接。但是,在此连接模型中需要考虑一些重要的安全和信任问题;在互联网上的随机用户之间不太可能有用。

TCP

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

【讨论】:

  • 非常感谢迈克,感谢您提供这些有用的信息!我来了!
【解决方案2】:

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

如果你在局域网之外,你不能启动到局域网上特定机器的 tcp 连接,但那台机器可以和你一起启动:http://en.wikipedia.org/wiki/Network_address_translator

【讨论】:

  • 嗯,这很奇怪。这里的其中一台计算机有一个 192.168.XX.XX,它似乎是私有的。但是另一个是 137.30.XX.XX .. 我很好奇,当我向另一台计算机发送消息(制作套接字 CX)时,我是否首先使用 http://?还是只是 IP?
  • Socket 连接通常使用 IP 完成。 HTTP 是协议。为了在两台计算机之间建立连接,它们都需要能够看到对方。如果一台计算机正在通过 Internet,则需要另一台计算机的公共 IP。如果两台计算机都在同一个 LAN/WAN/VLAN/无论它们应该能够相互通信,除非网络已被分段以防止这种情况。
  • @James,非常感谢 - 是的,这很有道理,我会再试一次!
  • 希望对您有所帮助。这只是网络理论。另外,我忘了补充一点,计算机可以访问 Internet,但它可能无法像主机一样运行(用于 FTP 服务、站点、游戏......)。 Mike Pennington 的回复中解释了一些进一步的概念。最后,这个关于 OSI 模型的链接值得一读:en.wikipedia.org/wiki/OSI_model
猜你喜欢
  • 2015-09-16
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 2012-08-10
  • 2014-02-11
  • 2021-09-20
相关资源
最近更新 更多