【问题标题】:How to retrieve server program ip by client program by only knowing the port number in a LAN?如何通过只知道局域网中的端口号来通过客户端程序检索服务器程序 ip?
【发布时间】:2015-09-10 15:06:56
【问题描述】:

我是一个尝试用 c 学习 winsock 编程的菜鸟。请告诉我以下是否可能。 如果这个问题很愚蠢,我很抱歉。但我真的很想知道答案。

我正在尝试一个客户端程序,它可以仅使用指定的端口号在网络上搜索其相关服务器。客户端必须在指定端口中找到提供服务的 IP,然后将该 IP 检索回客户端程序。所有这些都在同一系统或 LAN 中。

我的一个朋友说我必须在客户端的第一部分使用组播DNS或UDP来获取ip。得到ip后就可以和服务器建立tcp连接了。

是否真的可以通过udp将客户端ip发送到服务器并启动从服务器到客户端的tcp连接。 我对多播 DNS 是什么有了基本的了解。但我不够精通,无法在直播节目中使用它。

谁能告诉我这些操作必须使用哪些winsock2命令?????? 对不起,如果我对你的眼睛很傻。

【问题讨论】:

  • 如果有问题的机器仅使用 TCP 侦听此特定端口,则任何 UDP 多播都无法帮助您。
  • @alk 还有其他方法吗??
  • 尝试学习 Winsock C 编程”你或许更愿意从一些更琐碎的用例开始?
  • "other way* 使用connect() 的调用扫描所有可能的 IP 地址?为了减少要测试的地址数量,您可以假设所有地址属于客户端机器所属的子网。

标签: c winsock winsock2


【解决方案1】:

我的一个朋友说我必须在客户端的第一部分使用多播DNS或UDP来获取ip。得到ip后就可以和服务器建立tcp连接了。

您朋友所指的通常是使用 UDP 子网广播实现的。客户端在特定端口上向 LAN 子网的广播 IP 地址发送 UDP 消息。 IF 服务器与客户端在同一子网中,并且 IF 它正在侦听该 UDP 端口,它将接收消息并可以将响应发送回客户端发送消息的 IP/端口。当客户端收到该响应时,它会知道服务器的 IP,然后可以连接到服务器的 TCP 端口。

另一个选项是 IF 服务器使用多播定期广播其 TCP IP/端口。客户端可以加入多播组,接收广播的 IP/端口,然后连接到它。

真的可以通过udp将客户端ip发送到服务器

是的,通过向给定端口上的整个子网发送 UDP 广播消息。侦听该 UDP 端口的所有机器都将收到相同的消息,并且可以选择忽略它或响应它。

并启动从服务器到客户端的 tcp 连接。

客户端仍然必须启动与服务器的连接。广播只是允许客户端发现服务器的 IP 而无需寻找它。

谁能告诉我这些操作我必须使用哪些 winsock2 命令?

IF 服务器可以响应UDP广播,客户端可以使用sendto()WSASendTo()发送广播,然后使用recvfrom()WSARecvFrom()接收响应.使用GetAdaptersInfo()GetAdaptersAddresses() 发现局域网的子网广播IP 地址。广播端口必须提前知道。

如果服务器使用组播广播其IP,客户端可以使用setsockopt(IP_ADD_MEMBERSHIP)setsockopt(MCAST_JOIN_GROUP)加入组播组,然后使用recvfrom()WSARecvFrom()接收广播.

当然,在任何一种方法中,都必须提前知道广播消息的实际格式。

并且如果服务器不支持这两种方法,您将不得不对子网进行手动暴力扫描。给定客户端分配的 IP 地址和子网掩码(同样,可从 GetAdaptersInfo()GetAdaptersAddresses() 获得),您可以轻松计算子网的第一个和最后一个 IP 地址,然后连接到每个 IP 地址的 TCP 端口子网,直到找到服务器。

【讨论】:

  • 感谢您的精彩解释。我会尝试所有指定的方法。成功后我会告诉你我使用的是哪种方法。
【解决方案2】:

是的,有可能... 查看您需要做的是在特定端口上的网络中广播初始请求(应该是什么响应,您必须知道......有点像握手)。现在,无论哪种设备会以这种方式响应,您都会知道..

以这样的方式制作服务器,对于初始请求,它会回复它的 IP 和详细信息...

如果您在同一个局域网中,那么只有它是可能的。

【讨论】:

  • 广播一个 TCP 连接请求?
  • 我假设您考虑了 OP 给出的评论。
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
相关资源
最近更新 更多