1


0

与えられた - SP2と複数のネットワークアダプタを備えた.NET 2.0 XPマシン

ネットワークアダプタがファイアウォールされているかどうかを確認するために使用できるAPIはありますか?

OneGuyInDC

2 Answer


5


このC#コードを試してみてください。 それはWindows 7のために働きます( これは、現在のプロファイルのステータスを取得し、現在のプロファイルのWindowsファイアウォールを有効/無効にします(例:Home / Domain / Public access networks)。

使用法:

getFirewallStatus() - > Windowsファイアウォールが有効か無効かについてtrue / falseを返します。

setFirewallStatus(newStatus) - >有効または無効にされたファイアウォールを、渡されたtrue / false値に設定します。例えば、ファイアウォールを有効にするために:setFirewallStatus(true)

getCurrPolicy() - >他の2つのメソッドによって使用される

isWinXP() - > WindowsのバージョンがWinXP / 2000以降かどうかを返します。すなわち、Vista / Win7は他の方法でどのコードを使うかを決定するために使われます。

コード:

NetFwTypeLibを使用する。
// (don't forget to add it to your references, its under the COM tab)

パブリックブールisWinXP(){OperatingSystem os = Environment.OSVersion;} int majorVersion = os.Version.Major; //(majorVersion <6)の場合// http://msdn.microsoft.com/ja-jp/library/ms724832(v=vs.85).aspxを参照// O / SがVistaまたはWindows 7ではない場合{trueを返します。 } else {falseを返します。プライベート静的INetFwPolicy2 getCurrPolicy(){INetFwPolicy2 fwPolicy2;} tNetFwPolicy2 = Type.GetTypeFromProgID( "HNetCfg.FwPolicy2");と入力します。 fwPolicy2 =(INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2); fwPolicy2を返します。 } public bool getFirewallStatus(){bool結果= false;} switch(isWinXP()){case true:Type NetFwMgrType = Type.GetTypeFromProgID( "HNetCfg.FwMgr"、false); INetFwMgr mgr =(INetFwMgr)Activator.CreateInstance(NetFwMgrType); result = mgr.LocalPolicy.CurrentProfile.FirewallEnabled;ブレーク; falseの場合:INetFwPolicy2 fwPolicy2 = getCurrPolicy(); NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes; //現在のプロファイルタイプを読み取る(パフォーマンスを上げるためのみ)//各プロパティからCurrentProfileTypeへのアクセスを回避する。fwCurrentProfileTypes =(NET_FW_PROFILE_TYPE2_) result =(fwPolicy2.get_FirewallEnabled(fwCurrentProfileTypes));ブレーク;デフォルト:result = false。 // Win7をデフォルトでブレークすると仮定します。結果を返します。 } public void setFirewallStatus(bool newStatus){switch(isWinXP()){case true:Type NetFwMgrType = Type.GetTypeFromProgID( "HNetCfg.FwMgr"、false); INetFwMgr mgr =(INetFwMgr)Activator.CreateInstance(NetFwMgrType); mgr.LocalPolicy.CurrentProfile.FirewallEnabled = newStatus;ブレーク; falseの場合:NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes。 INetFwPolicy2 currPolicy = getCurrPolicy(); //現在のプロファイルタイプを読み取る(パフォーマンスを上げるためのみ)//各プロパティからCurrentProfileTypeへのアクセスを回避するcurrPolicy.set_FirewallEnabled(fwCurrentProfileTypes、newStatus);ブレーク;デフォルト:NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes1。 INetFwPolicy2 currPolicy1 = getCurrPolicy(); //現在のプロファイルタイプを読み取る(パフォーマンスを上げるためのみ)//各プロパティからCurrentProfileTypeへのアクセスを回避するcurrPolicy1.set_FirewallEnabled(fwCurrentProfileTypes1、newStatus);ブレーク; }}


2


_一般_を知ることは不可能です。 次の理由で外部ファイアウォールがある場合)

  1. 着信接続を受信して​​いない場合は、外部インターフェースが停止している可能性があります。

  2. あなたが外向きの接続をすることができないならば、あなたの外部インターフェースはちょうどダウンしているかもしれません。

しかし、Windowsファイアウォールが特定のネットワークインターフェイスで有効になっているかどうかを調べるためのAPIがあります。 COM相互運用機能を使用して、INetFwProfile(グローバルファイアウォールステータス用)およびINetSharingConfiguration(特定のネットワークインターフェイス用)インターフェイスを取得し、INetFwProfile.FirewallEnabledおよびINetSharingConfiguration.InternetFirewallEnabledを確認する必要があります。

リンク、およびこれらの結果を使用して有効なファイアウォールステータスを判断する方法については、http://msdn.microsoft.com/ja-jp/library/aa364717%28VS.85%29.aspxを参照してください。 (これはVBScriptで書かれていますが、C#に翻訳可能であるべきです。)