私の目的は、OSXのファイアウォールが動作しているかどうかを知っている必要があるため、ユーザにそれをオフにするか、新しいルールを作成するように伝えることができます。Objective-C:OSXのファイアウォールの状態を確認しますか?
また、私のアプリから直接ルールを作成して、ネットワーキングの問題に対処する必要はありませんか?
ジョン
私の目的は、OSXのファイアウォールが動作しているかどうかを知っている必要があるため、ユーザにそれをオフにするか、新しいルールを作成するように伝えることができます。Objective-C:OSXのファイアウォールの状態を確認しますか?
また、私のアプリから直接ルールを作成して、ネットワーキングの問題に対処する必要はありませんか?
ジョン
アプリケーションが(つまり、Finderでダブルクリックした)ユーザーによって実行されている場合は、ソケットリスナーを作成するには、アプリケーションによるいかなる試みは/そのリスナーを拒否できるようにするユーザーを促します - アプリケーションの部分でプログラムによる介入を行わずに、ファイアウォールの設定を調整します。
ファイアウォールがあなたのルータである場合(私が最近対処しなければならなかった問題)、いくつかの選択肢があります。サポートされている最適なオプションはBonjour/mDNSResponderです(あなたが二重の状況をサポートしない限り)。 Appleはかなり鈍角dns_sd.h周りのObjective-Cのラッパーアプリケーションを提供します:サードパーティのルートを行く
、TCMポートマッパーを見てみましょう。いくつかの推奨されなくなった機能を使用していますが、ARCサポート(重要な場合)を実行するには多少の努力が必要です。
http://code.google.com/p/tcmportmapper/
サポートのUPnPおよびNAT-PMP両方。
最後に、アプリケーションがデーモン(ユーザーインターフェイスなし)として実行されている場合は、ipfwを知る必要があります。自分を強くしてください。 "ipfw os x"のGoogle StackOverflowにより、2つ以上のリンクを投稿できなくなっています。ブリリアント。
・ホープ、このことができます....
私はあなたの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;
}
ファイアウォール、ルータ上にある場合はどう?あなたのユーザーは、自分でファイアウォールを処理するだけです。 –