【问题标题】:Discover a TCP/IP Socket?发现 TCP/IP 套接字?
【发布时间】:2010-09-08 15:57:25
【问题描述】:

我为此使用了 Objective-C 和 Java,但我认为这个问题与语言无关。

我有一个通过 TCP/IP 与 Java 服务器通信的 iOS 客户端。现在我需要至少告诉其中一方对方的 IP 地址。有没有一种标准方法可以“发现”IP 地址(从一侧或另一侧)?

另外,切换到 UDP 会如何影响答案?

【问题讨论】:

    标签: sockets udp tcp-ip


    【解决方案1】:

    有许多协议可用于发现网络上的其他设备/服务器。 iOS 领域中最常用的一种是“Bonjour”。查看 Apple 的示例应用程序。

    【讨论】:

    【解决方案2】:

    是否有一种标准方法可以“发现”IP 地址(从一侧或另一侧)?

    是的,它被称为“端口嗅探”,肯定会给您带来麻烦,因为它是一种常见的攻击。

    您只需尝试一个范围内的所有 IP 地址。许多防火墙产品会将此视为“入侵”尝试,并使用入侵检测软件记录您。

    我们几乎从不“发现”地址。

    这就是“域名”的用途。

    【讨论】:

    • 谢谢@S。洛特。也许我把这个问题说得太狭隘了。我想这样做的原因是我有一个 iOS 应用程序,我想连接到它旁边的计算机上的服务器。我不能使用域名,因为我不能要求桌面计算机用户确保他/她的计算机响应域名。
    • @Yar:“就在它旁边”在互联网上没有任何意义。连接性并非微不足道。不要试图让它变得微不足道——这样做会导致各种不需要的活动。台式计算机用户必须知道他们机器的 IP 地址或必须能够找到它。否则,机器之间的整个对话就不能被信任。请阅读“中间人攻击”。您可能会因为不够小心而造成安全灾难。
    • 谢谢,虽然我知道中间人攻击,但 IP 欺骗是用来执行它们的技术之一。因此,让用户在 iOS 客户端上输入服务器的 IP 地址很难“解决”安全问题。但无论如何,我真正想要的是jmdns.sourceforge.net 之类的东西,这是进行 DNS 发现的一种方式。举个例子,可以像处理蓝牙配对一样处理安全问题。
    • @Yar:让用户输入服务器的 IP 地址使用户成为安全解决方案的一部分。事实上,它确实“解决”了这个问题。安全是人们积极“做”的事情。除了检查,信任还来自哪里?与所有握手配对技术一样。蓝牙、SSL 等
    • @S.洛特,好点,无论如何,最初的问题都说得不好。一如既往地感谢您的宝贵时间。
    【解决方案3】:

    为什么服务器不能有一个众所周知的 DNS 名称?

    【讨论】:

    • 虽然我可以在“服务器”上运行一些软件,但我无法配置它的 DNS(或它的任何其他方面)。两台机器将在同一个子网中。
    • 如果它们在同一个子网上,那么一个简单的 UDP 广播通常就足够了。让客户端在服务器正在侦听的特定 UDP 端口上向子网广播地址发送广播。当服务器接收到广播时,它可以直接用它的 TCP IP/端口回复广播客户端。
    • 谢谢@Remy ...现在我必须弄清楚“简单的UDP广播”是什么意思。如果您知道任何链接,请告诉我。
    • 要获取子网的广播 IP,用子网掩码客户端的 IPv4 地址,然后附加子网掩码的倒数。换句话说:broadcast_addr = (ip_addr & subnet_mask) | ^subnet_mask;。例如,如果您的客户端的 LAN IP 为 192.168.0.1,子网掩码为 255.255.255.0,则子网的广播 IP 为 192.168.0.255。一旦你有了它,你就可以向该 IP 发送一个普通的 UDP 数据包,其中包含你想要的任何内容。如果你的 UDP 监听服务器绑定在同一子网上的 IP,那么它可以通过正常的读取操作接收 UDP 数据包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2011-09-20
    • 2015-05-29
    • 2020-12-03
    • 2017-01-02
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多