2011-01-15 5 views
5

私の目的は、OSXのファイアウォールが動作しているかどうかを知っている必要があるため、ユーザにそれをオフにするか、新しいルールを作成するように伝えることができます。Objective-C:OSXのファイアウォールの状態を確認しますか?

また、私のアプリから直接ルールを作成して、ネットワーキングの問題に対処する必要はありませんか?

ジョン

+0

ファイアウォール、ルータ上にある場合はどう?あなたのユーザーは、自分でファイアウォールを処理するだけです。 –

答えて

1

アプリケーションが(つまり、Finderでダブルクリックした)ユーザーによって実行されている場合は、ソケットリスナーを作成するには、アプリケーションによるいかなる試みは/そのリスナーを拒否できるようにするユーザーを促します - アプリケーションの部分でプログラムによる介入を行わずに、ファイアウォールの設定を調整します。

ファイアウォールがあなたのルータである場合(私が最近対処しなければならなかった問題)、いくつかの選択肢があります。サポートされている最適なオプションはBonjour/mDNSResponderです(あなたが二重の状況をサポートしない限り)。 Appleはかなり鈍角dns_sd.h周りのObjective-Cのラッパーアプリケーションを提供します:サードパーティのルートを行く

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

、TCMポートマッパーを見てみましょう。いくつかの推奨されなくなった機能を使用していますが、ARCサポート(重要な場合)を実行するには多少の努力が必要です。

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

サポートのUPnPおよびNAT-PMP両方。

最後に、アプリケーションがデーモン(ユーザーインターフェイスなし)として実行されている場合は、ipfwを知る必要があります。自分を強くしてください。 "ipfw os x"のGoogle StackOverflowにより、2つ以上のリンクを投稿できなくなっています。ブリリアント。

・ホープ、このことができます....

4

私はあなたの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; 
} 
関連する問題