gpt4 book ai didi

c - 在没有DHCP的情况下发现默认网关

转载 作者:行者123 更新时间:2023-12-03 02:40:25 25 4
gpt4 key购买 nike

一个疯狂的问题,但是总有没有DHCP的情况下发现默认网关吗?

这适用于网络上尚未使用DHCP且尚未具有IP地址的设备。我在想是否可以找到默认网关,然后我可以尝试猜测一个未使用的IP地址,然后在网络上广播以查看是否正在使用它。

我可能会问我明白的麻烦。例如。如果已经有一台具有静态IP且已关闭的计算机。

最佳答案

数据包嗅探一段时间,然后应用启发式。我假设其余的都是IPv4和以太网。如果使用以太网交换机而不是HUB,这将无法很好地工作。最后更多。
根据看到的以太网(或其他)和IP标头以及实际的ARP数据包(忽略广播和多播IP和MAC地址)创建自己的RARP(反向地址解析)表。确保您的表能够将多个IP地址映射到单个硬件接口。表中由实际ARP数据包输入或验证的任何IP地址都应如此标记。
网关可能会收到并发送更多流量。此流量可能具有来自许多不同网络的许多IP地址,但具有相同的硬件地址。网关将在您的表中显示为一个具有大量IP地址的MAC地址。您可能已经观察到涉及此MAC地址地址的ARP事务,因此您可以查找一个别名为IP的IP地址,该MAC也设置了seen in ARP packet标志。那几乎可以肯定是网关的IP地址。
您可能可以根据网关的IP地址猜测网络地址和子网掩码,但这可能不是您可以信任的。如果要尝试在具有非标准网络掩码的网络上进行此工作,则可以尝试执行以下操作。
制作两个IP地址大小的累加器变量:

uint32_t acc_and = 0xFFffFFff;
uint32_t acc_or = 0x00000000;

然后针对表中的每个ARP验证地址执行
acc_and &= ip_addr;
acc_or |= ip_addr;

您也可以为此使用来自网关的数据包中的目标IP地址(不是多播),但是您必须先了解网关,然后才能将其标记为此类。
查找网络掩码和网络地址
地址的网络部分在这两个地址中(第一个操作之后)应保持相同,但在 acc_and中的底部位应开始清除,而在 acc_or中的底部位应开始填充。有了足够的样本,您将能够通过以下方式确定网络地址:
uint32_t net_addr = acc_and & acc_or;

和网络掩码由:
uint32_t net_mask = acc_and ^ acc_or;

获取足够的采样本地IP地址可能会花费太长时间,因此您可以尝试通过以下方法缩小范围:
uint32_t almost_net_mask = acc_and ^ acc_or;
int i = 0;
while ( 1 & almost_net_mask ) {
i++;
almost_net_mask >>= 1;
}
uint32_t net_mask = 0xFFffFFff;
while( i-- ) {
net_mask <<=1;
}

这将找到您的最后1位。最低的0位显然不是地址本地部分的一部分。或者,您可以通过以下方式获得相同的 i
i = ffs( ~ ( acc_and ^ acc_or ) ) ; // assuming that int on your system is 32 bit.  if not use ffsl

如果您真的想确定自己的网络掩码和网络地址,现在可以尝试其他方法。您可以尝试查看网关是否会尝试转发您发送的数据包到您认为应该是本地地址的数据包。为此,必须继续为您分配一个IP地址,如果您的网络掩码不正确,这将很有风险。
为自己选择一个IP
尝试选择您从未看到来往流量的最低合法IP地址,以增加其不在范围内的机会。您可以欺骗该地址的ARP请求并寻找任何答复(您可以使用自己的真实MAC地址,但可以为此组成IP。不必一定是您的IP,这可能会使您感到困惑) 。找到IP地址后,就无法ARP要求自己使用它。
您可能获得的IP地址实际上过高。由于您的网络掩码仍然只是一个很好的猜测,因此很难确定这一点。如果是这种情况,那么您很不走运,因为没有空闲的插槽供您居住。
回到网络掩码
要查看您的网络掩码是否需要调整,请尝试发送IP数据包,该IP数据包具有您在本地网络中未看到的目标地址,但可能基于您对网络掩码和网络地址的猜测而可能在本地网络中。如果这些猜测不成立,则应该为网络地址分配太多位,因此,您需要发送到更改(到目前为止)最佳猜测网络地址的网络掩码部分的低位的地址。您可以像平常一样通过ARP发送IP地址并查看是否有人答复来尝试发送这些消息,但是由于您猜测的是地址并且可能会丢失,因此最好尝试将目标MAC地址设置为网关以查看是否将其转发。它可能配置为不这样做,因此您可以尝试先对在网络中已经观察到的网络成员执行此操作,然后再查看是否将其转发给您,以查看是否这样做。如果网关转发数据包,则可以依靠其对网络掩码的想法来缩小对网络掩码的想法。如果网关不会转发本地网络的已知成员所需的数据包,那么您可以继续使用本地网络掩码和网络的概念,直到有理由对其进行调整,或者针对该范围内的地址发出ARP请求(只会以“是”或“可能”回答您的问题,而不能肯定地回答“否”)。
如果您使用的是以太网交换机,而不是集线器
如果您使用的是以太网交换机,则事情会变得更加困难,因为如果交换机知道将帧转发到其他地方,则交换机将不会将以太网帧转发给您,因此您将看不到它们。但是,它将转发许多ARP请求,因为它们是广播的,除非发件人在ARP缓存中仍然有该IP的条目,而只是尝试尽早更新该条目(并非所有系统都可以这样做)。这将使您对网络及其成员的构想更加困难,但是您可能会做得不错。但是,您可能必须依靠网关的ARP请求数量,并且来自该网关的ARP请求数量要高于其他系统才能发现它。这很容易出错,因为文件服务器可能具有类似的流量。

关于c - 在没有DHCP的情况下发现默认网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2879874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com