c-使用套接字将数据包发送到另一个子网/网络



我正在努力查明网络中的机器是否正在运行某个应用程序。更像是,我正在尝试解析网络中节点的地址。

我构建了一个基于ARP的小代码,但它只适用于本地网络(同一个子网)。我想做的是解析子网之外的地址,即所有其他节点。

我读到了以下答案:UDP跨子网广播数据包并在不同子网上广播

但他们都在谈论更改路由器设置或创建多播网络。

  1. 根据我为多播工作所读的内容,我需要事先创建一个多任务网络。真的有必要吗
  2. 对于更改路由器设置,它真的必须是一个"特殊"路由器吗

这都是为大学作业准备的,可能会在特设网络或类似的网络上进行演示。我对解决最初问题的想法持开放态度。

PS:1.我是一个网络初学者,请原谅我的错误或误解。

  1. 我正在使用套接字和C(没有其他选项)

编辑1:我很清楚ARP在子网之外是无用的。我提到它是因为我使用了它,它有助于解释问题。

编辑2:

最初的问题是:

构建一个聊天应用程序,不需要使用任何类型的中央服务器,就可以从一个点向另一个点发送消息。甚至不允许使用带有中央商店的混合网络。

即,如果A和B是两个客户端,则A应直接连接到B,反之亦然。我做了一些研究,决定使用P2P架构。现在我陷入了一个问题,A将如何发现B的地址。如果我知道B的子网,我可以强行定位B,但由于我没有这样的信息,我该怎么办?

ARP不打算在本地网络之外路由,在IPv4中,"本地网络"通常对应于一个子网。您不应该期望ARP流量将路由器从内部传输到外部,或者反之亦然

类似地,UDP广播通常不会在本地网络之外传播,而且由于与安全性和流量相关的原因,它们不会传播也是一件好事。

  1. 从我读到的多播工作来看,我需要事先创建一个多任务网络。真的有必要吗

基本上是的。您的路由器需要配置为支持多播(这可能是它们的默认设置)。所有参与者都需要同意并加入同一个多播组。可能不需要任何新的网络硬件,但多播通信有自己的协议和网络要求;它不仅仅是一个可以跨越网络边界的广播。

  1. 对于更改路由器设置,它真的必须是一个"特殊"路由器吗

如果您的意思是更改路由器设置,以便在网络之间路由UDP广播,那么您确实需要一个公开此功能的路由器。但我敦促你不要这样做,因为它会让来自所有其他来源的广播,出于所有其他原因,也会通过路由器。至少,这会显著增加所有相关网络的噪音,但可能会产生除您的应用程序和服务之外的真正不当行为。

有限广播(255.255.255.255,ARP请求将其用作目的地址,ARP仅适用于本地LAN上的IPv4)无法跨越路由器,和网络广播(最后一个网络地址,其中主机是所有的)默认情况下不能跨越路由器(定向广播),因为这是一个安全风险(请参阅RFC 2644,更改路由器中定向广播的默认值)。

一些路由器可以配置为转发定向广播,但这可能很危险。

多播是一种广播形式。多播路由与单播路由非常不同,路径中的每个路由器都必须配置为多播路由。此外,主机必须先订阅多播组,然后才能侦听来自多播组的数据包。此外,还有一些多播组是所有主机都要侦听的,但这些是无法从本地LAN转发的链路本地多播。

添加其他答案:

ARP对于另一个子网中的系统是无效的。即使你能够向另一个子网中的系统发送ARP请求,并以某种方式接收到它的响应——为你提供该系统的MAC地址——你也不能用它向该系统发送数据包,因为以太网没有提供路由机制,因此系统永远看不到你寻址的任何以太网数据包。

如果您只是想确定另一个IP子网中的哪些系统是活动的,那么您可能可以通过其他方式来做到这一点。例如,看看nmap命令。它支持各种各样的IP通信方法,路由到另一个子网,并且通常可以检测存在哪些机器以及找到的机器上有哪些服务。

当然,你可以复制nmap自己做的事情。例如,如果您想了解子网192.168.10.0/24中的哪些系统正在侦听TCP端口80,一种方法是简单地尝试连接到该子网中每个系统上的端口80。一般来说,你可能会收到四个答案:

  1. 连接成功(无错误:机器存在,并且有一个程序正在侦听该端口)

  2. 连接被拒绝(错误号ECONNREFUSED:计算机存在,但存在没有程序在监听那个端口)

  3. 没有到主机的路由(EHOSTUNREACH:没有机器应答该IP地址)

  4. 无响应(ETIMEDOUT:可能发生这种情况的几个原因;例如,系统可能有防火墙设置,导致其忽略请求)

(还有其他不太可能的可能性。)使用其他IP访问方法(ICMP/ping、UDP数据包)会有不同的可能结果矩阵。

正如其他人所解释的,多播机制只会有助于发现一组预先配置为加入多播组的协作机器。

相关内容

最新更新