2009-11-02 5 views

ответ

2

Это невозможно знать вообще (например, если есть внешний брандмауэр) по следующим причинам:

  1. Если вы не получаете входящие соединения, ваш внешний интерфейс может быть просто отключен.
  2. Если вы не можете выполнять исходящие подключения, ваш внешний интерфейс может быть просто выключен.

Но является АНИ для выяснения, если брандмауэр Windows включен на данном сетевом интерфейсе. Вам понадобится использовать COM-взаимодействие, чтобы получить интерфейсы INetFwProfile (для глобального состояния брандмауэра) и INetSharingConfiguration (для определенного сетевого интерфейса) и проверить INetFwProfile.FirewallEnabled и INetSharingConfiguration.InternetFirewallEnabled.

См. http://msdn.microsoft.com/en-us/library/aa364717%28VS.85%29.aspx для ссылок и для использования этих результатов для определения эффективного состояния брандмауэра. (Он написан в терминах VBScript, но должен быть переведен на C#.)

+0

Слитые Ответы и +1 –

5

Дайте этот код C# ниже. Он работает для Windows 7 (& Vista) и XP. Это приведет к статусу и включению/отключению брандмауэра Windows для текущего профиля, например: сети Home/Domain/Public access.

Использование:

getFirewallStatus() 
    --> returns true/false for whether the windows firewall is enable/disabled. 

setFirewallStatus(newStatus) 
    --> sets the firewall enabled/disabled to the true/false value passed in 
     eg, to enable the firewall: 
     setFirewallStatus(true) 

getCurrPolicy() 
    --> used by the other two methods 

isWinXP() 
    --> returns whether windows version is WinXP/2000 or newer, ie: Vista/Win7 
     used by the other methods to determine which code to use. 

Код:

 
using NetFwTypeLib; 
// (don't forget to add it to your references, its under the COM tab) 

public bool isWinXP() 
{ 
    OperatingSystem os = Environment.OSVersion; 
    int majorVersion = os.Version.Major; 
    // see http://msdn.microsoft.com/en-us/library/ms724832(v=vs.85).aspx 
    if (majorVersion < 6) // if O/S is not Vista or Windows7 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
private static INetFwPolicy2 getCurrPolicy() 
{ 
    INetFwPolicy2 fwPolicy2; 
    Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2"); 
    fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2); 
    return fwPolicy2; 
} 
public bool getFirewallStatus() 
{ 
    bool result = false; 
    switch (isWinXP()) 
    { 
     case true: 
      Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); 
      INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType); 
      result = mgr.LocalPolicy.CurrentProfile.FirewallEnabled; 
      break; 
     case false: 
      INetFwPolicy2 fwPolicy2 = getCurrPolicy(); 
      NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes; 
      //read Current Profile Types (only to increase Performace) 
      //avoids access on CurrentProfileTypes from each Property 
      fwCurrentProfileTypes = (NET_FW_PROFILE_TYPE2_)fwPolicy2.CurrentProfileTypes; 
      result = (fwPolicy2.get_FirewallEnabled(fwCurrentProfileTypes)); 
      break; 
     default: 
      result = false; // assume Win7 by default 
      break; 
    } 
    return result; 
} 
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; 
      break; 
     case false: 
      NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes; 
      INetFwPolicy2 currPolicy = getCurrPolicy(); 
      //read Current Profile Types (only to increase Performace) 
      //avoids access on CurrentProfileTypes from each Property 
      fwCurrentProfileTypes = (NET_FW_PROFILE_TYPE2_)currPolicy.CurrentProfileTypes; 
      currPolicy.set_FirewallEnabled(fwCurrentProfileTypes, newStatus); 
      break; 
     default: 
      NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes1; 
      INetFwPolicy2 currPolicy1 = getCurrPolicy(); 
      //read Current Profile Types (only to increase Performace) 
      //avoids access on CurrentProfileTypes from each Property 
      fwCurrentProfileTypes1 = (NET_FW_PROFILE_TYPE2_)currPolicy1.CurrentProfileTypes; 
      currPolicy1.set_FirewallEnabled(fwCurrentProfileTypes1, newStatus); 
      break; 
    } 
}