如何识别你所连接的本地网络

如何识别你所连接的本地网络

我需要一个脚本来识别计算机是否通过 wifi 或电缆连接到我的家庭网络、工作网络或其他网络。

我的问题是是否有一些可用的网络标识符以及如何从 shell 脚本中获取它。

答案1

你的家、工作单位等都有不同的民众IP,以便您可以使用任何返回您的公共 IP 地址的 CLI 命令并根据此类命令的结果采取行动。

这些命令中的任何一个都可以在普通的 Linux 发行版上运行,我确信 Cygwin 中存在 wget,我只是不知道 curl 和 lynx:

wget -q -O - ipecho.net/plain
curl ipecho.net/plain
lynx --dump ipecho.net/plain

使用您的公共地址还有额外的好处,如果您将笔记本电脑带到一个新地方,您可以区分使用与您的工作/家庭/其他相同子网的不同 LAN 和您的工作/家庭/...。

答案2

我不知道是否有一个简单的命令可以执行此操作。可能有效的是以下内容:

wireless=<put name of wireless card here, e.g. wlp2s0>
wired=<put name of wired network adapter here, e.g. p1p1>
dev=$(ip route | grep default | awk '{print$5}') #finds the device that your Internet is coming through
if [ x$dev = x$wired ]; then
    echo "Wired connection."
elif [ x$dev = x$wireless ]; then
    echo -n "Wireless connection: "
    iwconfig $wireless 2>&1 | grep ESSID | sed 's@.*ESSID:\"\(.*\)".*@\1@' # prints ESSID of wireless connection only
fi

只要您不忘记填写有线/无线变量,这应该可行。

编辑 您绝对应该说您正在 Windows 下运行 cygwin。此脚本很可能无法在 cygwin 下运行。我从未使用过 cygwin,所以我不知道它模仿 Linux 的程度如何。如果此脚本不起作用,那么您就倒霉了(我认为)。

答案3

子网掩码是否根据您连接的网络而不同?您的家庭网络为 255.255.255.0,而您的工作网络 VLSM 为 255.255.255.254 或更低。

在 Windows 中通过命令行进行检查,在 Linux 中ipconfig通过子网掩码进行检查ifconfig

另一种方法是从您的计算机进行 DNS 解析,看看哪个 DNS 会选择它,是您在家中使用的 ISP 还是您办公室域下的 DNS 服务器?这也会告诉您,我的意思是查看您的路由表。

检查一下,看看您的第一条路线是否来自公司域内,在命令提示符内运行它。找到命令提示符并打开它,然后输入:

netstat -f

 TCP    10.0.0.145:56433       stackoverflow.com:http  ESTABLISHED  
 TCP    10.0.0.145:56462       stackoverflow.com:http  ESTABLISHED   
 TCP    10.0.0.145:56592       stackoverflow.com:http  ESTABLISHED
 TCP    10.0.0.145:56748       stackoverflow.com:http  ESTABLISHED
 TCP    10.0.0.145:56782       stackoverflow.com:http  ESTABLISHED
 TCP    10.0.0.145:56902       stackoverflow.com:http  ESTABLISHED
 TCP    10.0.0.145:56949       stackoverflow.com:http  ESTABLISHED
 TCP    10.0.0.145:57056       stackoverflow.com:http  ESTABLISHED

上面的例子显示了我们现在的位置,IP 已解析,因为我们-f应该位于此站点。有人说您在 Windows 环境中运行 Cygwin。为什么不将“cygwin\bin”目录添加到 Windows 路径中?您将可以完全访问大多数 GNU 工具,并且可以像在 Linux 上一样使用它们。

相关内容