Joh*_*ams 5 macos cocoa firewall objective-c
我的objective-c应用程序需要知道OSX中的防火墙是否正在运行,因此它可以告诉用户将其关闭或创建新规则.
此外,是否可以直接从我的应用程序创建规则,以便用户永远不需要处理网络问题?
约翰
我正在编写一个函数,可以为您提供 OSX 防火墙的状态:)
-(BOOL)getFirewallStatus{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSSystemDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
path = [NSString stringWithFormat:@"%@/%@",path,@"Preferences/com.apple.alf.plist"];
path = [path stringByReplacingOccurrencesOfString:@"/System"
withString:@""];
NSDictionary* _dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
// firewall status
int status = [[_dictionary valueForKey:@"globalstate"] integerValue];
if (status == 0)
{
return NO;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
如果您的应用程序正在由用户运行(即在 Finder 中双击),则您的应用程序创建套接字侦听器的任何尝试都会提示用户允许/拒绝该侦听器 - 并随后相应地调整防火墙设置 - 无需您的应用程序方面的任何程序干预。
如果有问题的防火墙是您的路由器(我最近不得不处理的问题),您有几个选择。受支持的最佳选项是 Bonjour/mDNSResponder(只要您不想支持双重身份情况)。Apple 围绕相当迟钝的 dns_sd.h 提供了一个 Objective-C 包装应用程序:
走第 3 方路线,看看 TCM Port Mapper。它使用了一些已弃用的功能,并且需要花费一些精力才能使其在 ARC 支持下运行(如果这对您很重要)。
http://code.google.com/p/tcmportmapper/
两者都支持 UPnP 和 NAT-PMP。
最后,如果您的应用程序作为守护程序运行(没有用户界面),您将必须熟悉 ipfw。振作起来。谷歌搜索“ipfw os x”。StackOverflow 阻止我发布两个以上的链接。杰出的。
希望这可以帮助....
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |