【问题标题】:How do I get the Mac OS X Firewall to permanently allow my iOS app?如何让 Mac OS X 防火墙永久允许我的 iOS 应用程序?
【发布时间】:2012-04-08 09:14:28
【问题描述】:

我正在编写一个 iOS 应用程序,除其他外,它还充当 telnet 服务器。自然,它一开始就开始监听连接。

当我在模拟器中运行应用程序时,Mac OS X(我恰好在 10.7.3 上)提示我允许或拒绝我的应用程序以接受传入的网络连接。这是 Mac OS X 用于所有未签名的联网应用程序的标准防火墙消息。

我厌倦了每天点击“允许”五十次或更多次,因此我想方设法将我的应用永久添加到防火墙的允许应用列表中。

我尝试了以下方法。

  1. 在我的应用运行时打开活动监视器。
  2. 选择我的应用程序。点击“检查”。
  3. 转到打开文件和端口选项卡。第一行之一是我的应用程序的精确路径。复制并粘贴此路径。
  4. 打开防火墙...高级设置。
  5. 单击 +(添加)按钮。
  6. 浏览到应用程序路径并选择它,从而将其添加到允许传入连接的应用程序列表中。

在最后一步有一个重大决定。您可以添加 .app 应用程序包,或在该包上显示内容并在其中添加“Unix 可执行文件”。这两种方法我都试过了。

有趣的是,Firewall 实际上会停止向您发出有关应用程序的警告 - 一段时间。 然而,在运行几次之后 - 我不清楚是什么事件真正导致了这种变化,但它对我来说,通常在半小时左右发生 - 防火墙会再次开始警告该应用程序。

如何将防火墙设置为永久允许我的 iOS 应用?

当然,我可以通过禁用 Mac OS X 防火墙绕过整个问题。我还可以通过砍掉它来避免再次在我的脚上留下碎片。这些行动方案都不推荐给我。

你有什么建议?

【问题讨论】:

  • 您是否尝试将模拟器添加到允许传入连接的列表中?
  • @lnafziger:添加模拟器不起作用。应用程序耗尽进程。

标签: ios macos firewall


【解决方案1】:

所以我们要抑制下面的对话框

您是否希望应用程序“NNN.app”接受传入网络 连接?

每次激活 Xcode iOS 模拟器时都会出现。 我相信现在有一个解决方案。我的回答基于 this 博客。

只需在终端窗口中运行以下命令:

#temporarily shut firewall off:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off

#put Xcode as an exception:
/usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/Xcode.app/Contents/MacOS/Xcode

#put iOS Simulator as an exception:
/usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator

#re-enable firewall:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on

对我来说它有效。请注意模拟器地址是根据Xcode 8.

【讨论】:

  • 谢谢@ishahak,它有帮助。仍然很奇怪苹果不信任它自己的防火墙软件。
  • 这对我有用,而手动将可执行文件(在我的例子中是电子)添加到安全和防火墙面板没有。
  • 我每次登录 Mac 时都必须运行这些命令。所以我最终使用 Lingon X (www.peterborgapps.com/lingon) 在以 root 身份登录时从 shell 脚本执行这些命令,因此从脚本的第一行和最后一行中删除了“sudo”前缀。
  • 似乎从 Catalina 和 Big Sur 开始,此解决方案不再有效。该脚本为脚本中间的两行提供了“您指定的文件路径无效”。这看起来与此处提到的问题相同:developer.apple.com/forums/thread/666222
【解决方案2】:

在尝试了一段时间后,我发现手动将可执行文件本身添加到防火墙的“允许”列表中可以获得所需的结果。您不添加 .app,而是在 .app 的 Contents 文件夹中添加“Unix”可执行文件。我相信我之前尝试过这个文件但没有成功,但目前它正在工作。

【讨论】:

  • 我想知道你还做了什么让它工作,因为这个解决方案对我不起作用:-\
【解决方案3】:

我认为最好的解决方案可能是将您的应用程序通过防火墙的过程编写脚本。

如果我没记错的话,最新的 OSX 防火墙实际上在识别应用程序和指纹允许的二进制文件方面非常聪明。这可以防止仅将恶意软件命名为“system32.exe”&c 以规避防火墙的惊人有效策略。如果是这种情况,您的应用将(正确地)被阻止,因为它不是正常的二进制文件,并且没有任何办法解决它。

因此,尝试编写防火墙允许过程的脚本并将其合并到构建过程中。

【讨论】:

  • @blahdiblah 我不相信可以编写脚本。 Firewall 不提供 AppleScript 库,也不会使用 shell 脚本。
【解决方案4】:

我从来没有将可执行文件手动添加到防火墙的允许列表中。这是一个使用自动鼠标点击的解决方案:

  1. 下载CLIclick。 (谢谢卡斯滕。)
  2. 把它放在合适的位置,比如/usr/local/bin
  3. 使用 4 获取 Allow 按钮的屏幕坐标。 (在我的示例中,它们是 x:750,y:600。)
  4. 使用此内容创建一个脚本(w: 是等待时间,以毫秒为单位):

    /usr/local/bin/cliclick c:750,600 w:1500 m:+0,+0 c:.
    

    (如果不将CLIclick“移动”到同一位置(m:+0,+0 部分)并使用c:. 在同一位置再次单击,我将无法让CLIclick 工作。)

  5. 打开 Xcode 的Preferences / Behaviors 并添加上面的脚本。
  6. 享受吧!

【讨论】:

  • 这是我见过的防火墙规则最复杂的解决方法。我很佩服你的坚韧,但这是对我享受 OSX 的又一次打击......
【解决方案5】:

我不知道这是否正确,但对我来说有效。

  1. 关闭防火墙
  2. 将 iphone 应用程序连接到您的 mac
  3. 检查连接中的一切是否正常
  4. 打开防火墙

【讨论】:

  • 我正在使用 MacOS 10.15.7 并发现 (sudo) 关闭然后打开防火墙似乎允许任何应用程序允许传入连接。这解决了我的 python 应用程序的问题,但在我脑海中提出了一些安全问题......
猜你喜欢
  • 2016-04-18
  • 2012-01-26
  • 2014-01-15
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 2012-02-01
相关资源
最近更新 更多