如何使Mac自动重新连接到wifi网络?


11

我有一台Mac Mini服务器,每隔几天左右就会从wifi网络断开连接。可能还有其他参数导致初始断开连接(例如,无线路由器正在重新启动),但Mac不会自动重新连接。

这是一个主要问题,因为它是一台服务器计算机,突然消失,直到有人亲自访问该计算机并使用wifi菜单手动重新连接到网络。我应该提到,尽管wifi网络是WPA2,但是手动重新连接并不涉及重新输入密码,因此没有明显的理由说明它不会自动重新连接。

如何使Mac定期尝试重新连接到指定的wifi网络?


问题网络是否定义为“首选”?您是否已在“系统偏好设置”>“网络”中选中“记住该计算机已加入的任何网络”,并且未选中“注销时与无线网络断开连接”?您也可以尝试删除并重新创建网络连接。
2011年

“注销时与无线网络断开连接”选项在哪里?它正在运行Lion。
GJ。

显然是在“高级”设置中。
harrymc

不会使您感到偏执或其他任何事情,但是破解WPA2加密的唯一方法是嗅探身份验证数据包(当计算机连接时),而最常见的方法是取消对其中一台计算机的身份验证并在出现以下情况时嗅探网络它重新连接。
Nate Koppenhaver

Answers:


12

这是一个Applescript和Shell脚本,用于检查是否已连接机场以及是否未连接机场。

if (do shell script "networksetup -getinfo Wi-Fi | grep -c 'IP address:'") = 1 then
    do shell script "networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>"
end if
#!/bin/bash
if [ $(networksetup -getinfo Wi-Fi | grep -c 'IP address:') = '1' ]
then networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>
fi

<networkName>网络名称和<passwordToNetwork>密码替换。如果您尚未更改网络设备,则“ en1”应该正确。

现在,您需要做的就是循环或调用它来检查连接。

但是,如果连接断开,机场应自动重新连接。也许尝试重置所有网络首选项,然后查看是否可行。

如何完全重置网络首选项:关闭机场。关闭系统偏好设置。导航至:/Library/Preferences/SystemConfiguration/ 制作副本,然后删除以下文件:

com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist

谢谢。为什么要使用applescript?它似乎更适合于一个shell脚本,也许每分钟运行一次,使用launchd运行。
GJ。

另外,您如何“重置所有网络偏好设置”?
GJ。

这可以通过shell脚本来完成。尽管我擅长Applescript,所以我用Applescript编写了它。我将看看是否可以在Shell脚本中编写它。我还更新了有关重置网络偏好设置的信息。
卡西姆·多塞尔

改进了脚本并添加了shell脚本。
卡西姆·多瑟尔

我修复了最严重的shell脚本错误,但应该将其重构。在我的Mac上,启动grep时有2个点击,关闭时只有1个,但是检查其他内容可能会更好。计算事物的数量几乎是一种反模式。
人间

5

我想评论Kassym Dorsel的回答,但我没有足够的意见。

我的Mac服务器有相同的问题:

Wi-Fi连接到VPN,以太网连接到LAN,因此如果Wi-Fi连接丢失,则OS X不会自动重新连接。

考虑到Kassym Dorsel的答案:

  • 我不愿意将Wi-Fi密码存储在明文中(诚然,这是极低的风险,但仍然如此)。

  • 我想让它启用Wi-Fi(如果已禁用)。

  • 我希望它处理分配了静态IP地址,启用了Wi-Fi的情况,但该状态仍未连接或连接到错误的Wi-Fi网络(SSID)。

因此,我修改了他的脚本来解决这些问题(<networkName>用您首选的网络SSID 代替):

#!/bin/bash

# turn on Wi-Fi if it's turned 'Off'
if networksetup -getairportpower en1 | grep -q 'Off'
    then networksetup -setairportpower en1 on
fi

# cycle Wi-Fi power if missing 'IP address'
if [ $(networksetup -getinfo Wi-Fi | grep -c 'IP address:') = '1' ]
then
    networksetup -setairportpower en1 off
    networksetup -setairportpower en1 on
fi

# initiate connection if not connected to the correct network
if networksetup -getairportnetwork en1 | grep -q '<networkName>'
    then networksetup -setairportnetwork en1 '<networkName>'
fi

与已接受的答案类似,我修复了最有问题的Shell编程问题。现在,这几乎是优雅的。
人间

2

您可能会尝试使用该airport实用程序(在较新的OS X版本中,它被隐藏在/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport类似路径中)。

具体来说,JoinModeJoinModeFallback首选项可能有用。在我的机器上,默认JoinModeFallback设置为DoNothing。将其更改为KeepLooking一个有希望的开始。

运行时airport不带参数即可查看其帮助。


这很有趣并且很有希望,但是最终并没有改变我。我更改了首选项(我的后备设置为“未知”和“没有”),但WiFi仍然无法重新连接。
三人房

0

这是一个对我有用的简单重构。

#!/bin/bash
networksetup -getinfo Wi-Fi | grep -q Subnet: ||
networksetup -setairportnetwork en1 "$ssid" "$password"

显然,$ssid用实际的网络SSID和$password该网络的密码替换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.