在 BASH 中检测公共网络上的已知计算机

在 BASH 中检测公共网络上的已知计算机

有人知道如何通过 BASH(特别是 OSX 终端,但我更喜欢没有 OSX 内置功能的 BASH 解决方案)来检测公共网络上的已知计算机(我也位于该网络上)吗?

我的想法是,因为我知道我要查找的计算机的 MAC 地址,所以我可以简单地将其解析为 IP,但我不确定如何使用 BASH 命令将 MAC 地址解析为公共网络上的本地 IP 地址。

我的目标是建立一个脚本解决方案,让我可以设置一个桌面图标,当我双击该图标时,它会检测网络上的已知计算机及其对应的本地 IP 地址,为 VNC 创建 SSH 隧道,然后通过 SSH 隧道打开屏幕共享应用程序。本质上,双击即可在公共网络上打开安全的屏幕共享连接,无需第三方软件,仅可通过 BASH 和 OSX 使用工具。

所有这些都发生在同一个公共 wifi 网络内。例如,假设两个人去同一家咖啡店。我希望 A 扫描 B 的 IP,因为他们已经知道 B 的 IP 地址。

答案1

他们为此创建了一个称为 DNS 名称的东西。如果它是一个公共服务器,那么它很可能有一个。如果没有,那么你将需要自己创建一个,如果你的组织中已经有 DNS 名称,那么只需在你的 DNS 服务器上添加一个新的 A 记录,为该服务器指定一个新的子域。一般来说,公共服务器都使用静态 IP 地址,所以即使这不是真正需要的。IP 永远不会改变,所以只需使用它。如果 IP 正在改变,那么你将需要在服务器上安装一个动态 DNS 客户端,它将自动为你保持 DNS 条目的更新,或者设计你自己的系统(可能是让你的主机文件保持更新的脚本 [我的意思是每个客户端上的主机文件;而不是服务器上的主机文件])。此外,无需担心本地 IP 与公共 IP。这是你的路由器知道如何自动管理的东西。只要你的路由表设置正确,它就会找到到服务器的最佳路径。如果你有一个家用路由器,那么这一切都将在后台自动处理。

更新

我其实刚刚想到了一个应该可行的好办法。获取一个像 Google Drive 这样的云驱动器。在两台计算机上进行设置以正确同步。然后让另一台电脑将包含本地 IP 的文件写入同步文件夹:

echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'` > /home/user/share/pcname_current_ip

现在您只需要读取该文件即可找到该计算机的当前 IP(当然只要它们都已同步)。

答案2

简短回答:最简单的方法可能是在笔记本电脑上安装类似动态 DNS 更新客户端 当他们不在您的本地网络中时跟踪他们的动态 IP 地址。

再说几句:问题在于,如果只有 MAC 地址,那么一旦你呼叫它的 IP 地址,就必须扫描子网才能找到具有该 MAC 地址的应答机。问题的另一面是,每次远程机器连接到提供商时,这个 IP 都会改变(或者 ADSL 重置连接并分配不同的 IP 地址)。

如果该机器(笔记本电脑)以某种方式传达当前 IP,则最简单。一种方法是使用动态 DNS 更新客户端。它甚至存在于 Linux 守护进程中dd客户端这对 [动态 IP 服务器] 有帮助。(http://ubuntuguide.org/wiki/Dynamic_IP_servers

之后,您选择您的名称(例如“myname.AtFreeOrCommercialProvider.org”)并在笔记本电脑上启用一个程序来更新 IP,从办公室写入上述行就足以知道远程机器的当前 IP:

host myname.AtFreeOrCommercialProvider.org  

之后,您就可以将其写入脚本中并根据需要使用。


关于原始方式的更多文字你最初的问题的核心是

我知道我想查找的计算机的 MAC 地址,我可以只需将其解析为 IP,但我不确定如何使用 BASH 命令将 MAC 地址解析为公共网络上的本地 IP 地址。

要从 IP 地址获取 MAC 地址,您可以使用以下方法之一,该方法将为您提供网络中应答计算机的 IP 和 MAC 地址:

  1. nbtscan例如,nbtscan 192.168.1.0-255将扫描您指定的 IP 地址组,并使用 IP 地址、NetBIOS 名称、服务器、用户、MAC 地址进行回答。(如果 192.168.1.xxx 是您的本地网络...)
  2. arp没有模式说明符将打印 IPv4 网络邻居表的当前内容,包括 IP 和 MAC 地址。如果您使用的是有线连接,或者如果您使用的是无线连接,则
    来自同一系列的工具...sudo arp-scan --interface=eth0 192.168.0.0/24sudo arp-scan --interface=wlan0 192.168.0.0/24
  3. nmap -sP xxx.xxx.xxx.xxx在所有本地网络地址上并使用已知的 MAC 地址对其进行过滤。
  4. nmblookup如果您知道 NetBIOS 名称...

之后,在同一行中输入 IP 和 MAC:address,您就可以编写脚本了。可能需要安装其中一些工具。

PS> 您可以通过以下方式了解您当前的 IP 地址

# if you are using a cable connection on the network ineterface eth0
sbin/ifconfig eth0 | grep -E "inet:" | awk '{print $2}' | sed s/"inet:"//g
# or you are using a wireless connection on the network ineterface wlan0
sbin/ifconfig wlan0 | grep -E "inet:" | awk '{print $2}' | sed s/"inet:"//g

PPs> 恕我直言,事实并非如此好的或者高效的扫描整个互联网只是为了知道那台特定的计算机是否连接...如果你把这台计算机连接到 LAN 或虚拟专用网络,情况就不同了(需要扫描的 IP 较少,这是可能的)... :-)

答案3

如何在一台电脑上设置自己的临时无线网络,并通过它路由其他电脑的流量?安全且无需第三方 IP 跟踪...

答案4

实现此目的的最简单方法是使用 logmein 或 team viewer。是的,它是第三方程序,但工作起来非常简单。

相关内容