【问题标题】:Which local ip connects to a remote ip?哪个本地IP连接到远程IP?
【发布时间】:2012-02-07 11:34:06
【问题描述】:

很抱歉,如果之前有人问过这个问题,但找不到关于这个特定问题的任何信息。

我试图找出我的计算机使用我自己的哪个 ip 来连接到远程 ip。 我以两种方式使用某种套接字设置等,并将我的 ip(和其他带有 xml 的东西)发送到另一台服务器,以便它知道如何联系我。 但是我如何确定我应该发送哪个 ip 呢? 我有服务器 ip 或主机名,但尝试使用

Dns.GetHostEntry("host").AddressList

但这只会给我远程主机的 ip,而不是我的计算机如何到达它。

我的问题完全可以解决还是只是一厢情愿?

【问题讨论】:

  • 如果您在 NAT 网关后面(例如大多数家庭路由器、蜂窝连接等),发送您的本地 IP 将毫无用处。它会是(比如说)10.x.x.x 并且无法从外部访问。
  • Minitech:也在考虑这个问题,但是如果用户有多个局域网,例如虚拟机,就很难知道哪个局域网与连接的服务器有关。
  • Marc B:这是此内容中的一个计算风险 :) 大多数用户都知道他们需要一个公共 IP 才能通过 Internet 连接。但这主要用于内部网络。
  • 这还有必要吗?如果您先连接到服务器,它会知道您从哪个 IP 连接,因此可以使用它来“回电”,假设不涉及 NAT。您只需要告诉服务器您正在侦听的端口号。

标签: c# sockets ip-address system.net


【解决方案1】:

您可以让远程主机捕获该数据吗?那肯定会有的。

【讨论】:

  • 这是我考虑过的一个选项,但该部分不是内部构建的。但是提出这个问题不会有什么坏处,我想他们很难解决它。
【解决方案2】:

如果您使用的是 UDP,那么这正是 STUN 协议的设计目的。 STUN 用于 VOIP 应用程序(以及其他 P2P 系统),以便能够判断特定连接在 Internet 上的样子。

实现STUN 的一个非常可靠的.NET 实现包含在Lumisoft.NET 库中(源代码可用here)。我自己使用它来满足从 VOIP 到 P2P VPN 替代方案的应用程序的这一特定任务。它非常易于使用并且符合标准。

注意:我以任何方式隶属于 Lumisoft,我只是在几个不同的应用程序中使用了他们的库

【讨论】:

  • 转念一想,这只适用于有限的情况,您的问题并不具体。如果您的应用程序是 UDP,它会工作,您希望您的应用程序在更大的互联网上工作,并且您在支持 STUN 作为遍历机制的路由器后面。
【解决方案3】:

好的,快速更新,除了我自己不会帮助任何人。

但是。

发现我可以发送主机名而不是实际 ip,现在和大多数情况下都可以使用,让 DNS 做它应该做的事情:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多