【问题标题】:Verify network identity through unix commands通过 unix 命令验证网络身份
【发布时间】:2014-08-08 19:47:27
【问题描述】:

首先介绍一下背景:我正在使用 Mac OSX 中的 LaunchD 功能来定期启动一个应用程序,我将称之为“AppX”。理想情况下,我喜欢几乎 24/7 运行这个应用程序。但由于内存泄漏问题(这是我的最佳猜测),AppX 会定期关闭。为了解决这个问题,我创建并加载了一个简单的 plist 文件,以每 6 小时启动一次应用程序。这本身就可以完美运行并最大限度地减少应用程序停机时间。但是,AppX 本身可能会消耗我的电池电量,我希望它仅在我在家时连接到我的 wifi 网络时启动。

请注意,虽然我对 C++ 和 Java 有一定的经验,但我对 Unix 知之甚少。

我的问题:我想使用 if 语句来检查我连接的网络是否是我的家庭 wifi 网络。既然如此,系统就会执行命令:

open -a AppX

那么...我将如何实现 if 语句来完成此操作?任何帮助表示赞赏。

【问题讨论】:

  • 我想你可以从 netstat 命令开始。 netstat -an 显示所有连接的网络

标签: macos unix networking identity launchd


【解决方案1】:

有一个较旧的 SO 问题给出了部分答案:

Get wireless SSID through shell script on Mac OS X

至于 if 语句,以下应该起作用:

homenet = "MyHomeNetwork"
netname = /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'
if [ "$netname" -eq "$homenet" ]
then
    # Do fancy service startup here
else
    # This is not my home network
fi

【讨论】:

  • 太棒了,谢谢。经过一些调整后效果很好(花了我几个小时但很好的学习经验)。我使用以下代码让它工作:homenet="HOMENET"; netname=``/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}’``; if [ $netname = $homenet ]; then open -a AppX; fi 如果用换行符替换分号,则更易于阅读,但代码必须是全部一行才能启动。此外,双记号 (`) 实际上是单记号 (`)。正在格式化...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2013-08-24
相关资源
最近更新 更多