Задача-C: Проверить состояние брандмауэра в OSX? - PullRequest
5 голосов
/ 15 января 2011

Моему приложению target-c необходимо знать, работает ли брандмауэр в OSX, чтобы он мог сказать пользователю отключить его или создать новое правило.

Также возможно создание правилпрямо из моего приложения, чтобы пользователям никогда не приходилось решать проблемы с сетью?

Джон

Ответы [ 2 ]

4 голосов
/ 18 ноября 2015

Я пишу функцию, которая предоставит вам статус брандмауэра 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;
}
1 голос
/ 31 декабря 2011

Если ваше приложение запускается пользователем (т. Е. Выполняется двойной щелчок в Finder), любая попытка вашего приложения создать прослушиватель сокетов побудит пользователя разрешить / запретить этого прослушивателя - и впоследствии отрегулировать настройки брандмауэра. соответственно - без какого-либо программного вмешательства со стороны вашего приложения.

Если рассматриваемый брандмауэр является вашим маршрутизатором (проблема, с которой мне недавно пришлось столкнуться), у вас есть несколько вариантов. Лучше всего поддерживается Bonjour / mDNSResponder (если вы не хотите поддерживать ситуацию с двойной натурой). Apple предоставляет приложение-оболочку Objective-C для довольно тупого dns_sd.h:

http://developer.apple.com/library/mac/#samplecode/PortMapper/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007879-Intro-DontLinkElementID_2

Идя по стороннему маршруту, взгляните на TCM Port Mapper. Он использует некоторые устаревшие функции, и потребуется немало усилий, чтобы запустить его с поддержкой ARC (если это важно для вас).

http://code.google.com/p/tcmportmapper/

Оба поддерживают UPnP и NAT-PMP.

Наконец, если ваше приложение работает как демон (без пользовательского интерфейса), вам необходимо ознакомиться с ipfw. Готовьтесь. Google для "ipfw os x". StackOverflow не позволяет мне публиковать более двух ссылок. Brilliant.

Надеюсь, это поможет ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...