好吧,所以我的问题有点离谱,我读过很多类似的问题,但他们实际上从未真正做到我想要完成的事情。
所以最好的描述方式是用这个场景:
我有 3 台电脑,都有以太网适配器。
- 台式计算机 - Windows,我工作的计算机,有 Cygwin。
- 便携式 Raspberry Pi - 我去不同地方时使用的一个。
- 安装 Ubuntu 的笔记本电脑 - 我几乎把它作为备份计划
当我将树莓派移动到另一个安装位置时,我需要能够通过 eth0 将其直接连接到另一台计算机。问题是我讨厌拿出我的笔记本电脑并启用一堆转发解决方案以允许其他人的机器与我的 pi 一起工作。
每次我想连接到 Pi 时,我都必须将 Pi 的静态 IP 设置为 192.168.0.* 等,并将工作计算机设置为 192.168.0.1。我不想再拿出键盘和其他工具来尝试设置这些选项。现在,我已经制作了一个 python 脚本,一旦 Pi 启动,它就会将其 IP 设置为 192.168.0.3,并在没有通过 DHCP 连接的情况下找到它。
这对于连接到我的桌面很有好处,我强制我的以太网保持在某个 IP,并在后面进行一些黑客共享连接接口。我只是不能将其与其他机器一起使用。
这引出了真正的问题:如果可能的话,我怎样才能让我的 Pi 以某种方式查询以太网查看直接连接的计算机是否已经设置了静态 IP 地址,然后只需将其自己设置为匹配的 IP 即可进行配对?
所以我想说的是,我需要能够将这个 pi 插入机器。他们的适配器(主机)的IP已经设置好了。假设现在实际上是 192.168.172.1;并且 pi 会识别192.168.172._并将其地址设置为 3 或 31 之类的值,以便我可以通过 SSH 连接到它。
“专业人士”告诉我这是不可能的,但我不相信。这是 21 世纪,我们没有变异的联系。亵渎。哈哈,我想弄清楚这一点,我认为将它放在我的 Linux 武器库中会很有用。 “同化以太网守护进程”
[编辑:] 作为澄清,连接将通过单根电缆进行。如果它位于集线器或交换机等网络中,则它们具有 DHCP,并且 PC 将自动获得地址。所以我们的解决方案只需要关心与另一台机器的随机连接。
答案1
我不想把我的脚放在我的嘴里,但我不认为你想要做的事情对于你将这个 Pi 连接到的任何随机机器都是可能的。
想一想。问题有两个方面。在启动时,您的 R-Pi 有一个固定的地址。正确的 ?如果您要连接的计算机未配置该 IP 地址/子网掩码,则两者将如何通信和交换信息?当您拥有自己的笔记本电脑时,您就处于受控环境中。如果您连接到一台随机机器,您必须预料到意外情况,然后您将如何处理它?您可以运行一个程序来扫描所有可能的 IP 地址,从 192.168.xy 或 172.10.xy 等常见的可疑 IP 地址开始,但这是一个非常漫长且乏味的过程
第二件事是,如果您连接 R-Pi 的机器位于不同的网络上,例如通过 WiFi 或其他网络适配器,那么您就又完成了。
您需要了解,控制连接的不是您的 R-Pi。这是另一边。当“另一边”是随机的时,你会做什么?
答案2
您可以使用arp-scan
:
$ arp-scan --interface=eth0 192.168.0.0/24
或者nmap
:
$ nmap -sP 192.168.0.0/24
扫描网络上的所有地址以获取响应。
问题是:您是否假设您的 Pi 连接的每台计算机都位于 192.168.0.0/24 网络上(如上面的示例所示)?
如果这样做,那么扫描不会花费很长时间 - 在我的 WiFi 网络上需要 3.56 秒,nmap
而在我的 WiFi 网络上则需要 2.28 秒arp-scan
。
您是否假设所有内容都位于 RFC 1918 中指定的完整 192.168.0.0/16 上,这大约需要 4.5 分钟arp-scan
?
相同扫描速度下,扫描10.0.0.0/8需要近18个小时。
但如果扫描完整的 4,294,967,296 个可能的 IP 地址,可能需要半年多的时间!
当然,我们假设它有一个 IPv4 地址。它可能是在 IPv6 上,计算出来有 2,420,352,024 年!
如果您扫描任何大于 192.168.0.0/24 的内容,您不妨插入键盘:-)
答案3
如果将 r-pi 插入具有合理流量的网络,则可以监控接口上的 ARP 流量。
这与 @garethTheRed 的答案类似,但依赖于被动监控而不是主动探测。可能需要很长时间才能看到 ARP 数据包。ping
从您想要连接的机器上运行或执行其他操作会有所帮助。
您可以使用tcpdump -l -n -i eth0 arp
eth0 监听 ARP 数据包。当您的脚本发现 ARPwho-has
或 ARPReply
数据包时,提取 IP 地址,在同一子网中选择一个不在 ARP 表中的随机 IP,然后尝试使用它。
tcpdump
或者,您可以arp -n -i eth0 | awk 'NR>1 && !/incomplete/ {print $1}'
经常运行以输出内核 ARP 表中所见 IP 地址的列表,而不是。
警告:事实上,您在观看时并没有看到 IP 在网络上被使用并不意味着它没有被另一台机器使用或分配给另一台机器。这可能意味着它最近在网络上没有处于活动状态,或者您位于交换网络上并且它没有发送任何广播数据包。如果您劫持了网络上其他人的 IP 地址,您可能会受到呵斥。根据劫持 IP 的副作用,可能还会产生进一步的后果(例如劫持属于服务器或路由器或老板笔记本电脑的 IP 地址可能会被解雇)
另一种可能会少很多麻烦的选择是:
在您的 r-PI 上设置静态 IP 地址。使用私有 RFC-1918 IP 地址。对您自己的 LAN 上的所有计算机使用相同的子网。选择一个不太可能在其他站点使用的选项(即不是常用的默认值之一,例如 192.168.0.x)。
每当您需要从另一台计算机与 r-PI 通信时,只需将子网中的第二个 IP 地址添加到该计算机的以太网接口(如果它尚未位于同一子网上)。
注意:网络交换机有时会配置为丢弃来自未知子网的数据包。在这种情况下,您最好的选择就是让您的 r-PI 成为 DHCP 客户端(这样做不是运行 dhcp服务器在您的 r-PI 上,然后将其插入您不拥有/控制的网络或在其上运行另一个 dhcp 服务器的网络)。