我有一个非常典型的情况,我想使用 ssh 将(android)手机连接到同一(wifi)网络中的 Linux 笔记本。 IP 是由 DHCP 分配的,所以我提前只知道客户端的 IP。知道客户端的 IP 后,原则上我可以在同一网络中的所有可能的 IP 上循环执行 ssh 命令,以查看服务器是否正在侦听。然而,这似乎效率极低。那么,如何找出主机的 IP(知道它的 MAC 地址)以便我可以使用 ssh 连接到它?我知道其他软件可以实现类似的功能,所以它一定是可能的。相关:我可以在客户端(假设是 Linux)上为该 IP 动态分配主机名,以便我可以在 ssh 配置文件中使用静态条目吗?
答案1
您可以通过以下两个步骤来完成:
步骤1:
扫描您的子网以填充 ARP 缓存。有一些方法,但我建议fping
。通过在终端中运行以下命令在 Ubuntu 上安装它:
apt-get install fping
...然后扫描您的网络(例如,子网 192.168.10.0/24):
fping -g 192.168.10.0/24
现在 ARP 缓存已充满子网中设备的 MAC 地址。
第2步
在 ARP 缓存上应用适当的过滤器以仅查看目标设备。只需使用以下命令(aa:bb:cc:dd:ee:ff
设备的MAC地址在哪里):
arp -n | grep -i aa:bb:cc:dd:ee:ff | cut -c-15
输出是目标设备的 IP 地址。
编辑1:
示例 MAC 地址已更改为小写,因为 Linux 以这种方式显示(与使用大写的 Microsoft Windows 不同)
编辑2:
以下 bash 脚本将一个条目添加到主机文件 ( /etc/hosts
) 中,名称为手机这样您就可以使用名称访问您的设备手机。要刷新关联的 IP 地址,只需再次运行即可。将name
、mac
和更改subnet
为所需值。
#!/bin/sh
name="cellphone"
mac=aa:bb:cc:dd:ee:ff
subnet=192.168.10.0/24
fping -g ${subnet}
ip="$(arp -n | grep -i ${mac} | cut -c-15)"
sed -i".bak" '/'${name}'/d' /etc/hosts
if [ -z "$ip" ]; then
echo "Device not found!"
else
echo "${ip}\t${name}" >> /etc/hosts
fi
答案2
零配置可能是这里的一个解决方案。它是一种发现网络上的服务并在两台主机之间建立链接的协议。
如果您设置 avahi mDNS(包avahi-daemon
和libnss-mdns
),主机会公布其主机名,您可以使用 解析它们<hostname>.local
。
答案3
听起来你的问题是你正在将某些东西插入网络并且你希望能够知道它将获得什么IP。
在此基础上,听起来最简单的解决方案是配置 DHCP 服务器,为适当的 MAC 地址提供静态 IP。
您可以控制 DHCP 服务器吗?如果是这样,您可能可以做以下两件事之一:
- 检查日志以查看给定 MAC 分配的 IP。
- 设置静态地图。