2011-12-13 10 views
5

Ho bisogno di aprire una porta specifica per la mia applicazione.Crea regola firewall per aprire la porta per applicazione a livello di programmazione in C#

Ho provato a utilizzare la regola INetFwAuthorizedApplication per applicazione per tutte le porte.

fwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app) 

alternativa aprire una porta per tutti appllications utilizzando INetFwOpenPort.

firewallManager.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(port) 

Esiste un modo per aprire a livello di programmazione solo una singola porta per applicazione a livello di codice? Posso farlo manualmente attraverso le impostazioni del firewall.

+1

spero che questo non è possibile altrimenti il ​​mio investimento in un software di sicurezza era uno spreco di denaro. Sei sicuro al 100% di aver persino bisogno di aprire la porta, la maggior parte delle applicazioni non richiede nemmeno questo, anche se forniscono istruzioni su come farlo ai loro utenti. Cosa intendi con "Non avrò bisogno di aprire UDP se è possibile" la dichiarazione non ha senso. –

+0

Invece di aprire troppo sto cercando di essere più restrittivo. Aggiungendo la mia applicazione a AuthorizedApplications l'applicazione è in grado di ascoltare/comunicare su tutte le porte locali e remote. Ho davvero bisogno di aprire la mia applicazione solo per una singola porta. Quando si crea manualmente una regola firewall, è possibile specificare solo l'applicazione e la porta specifica. UDP vs TCP non è così importante e significa solo che non devo avere due regole in entrata sul mio firewall. Lo rimuoverò dalla mia domanda dato che è davvero una seconda domanda. – Marek

risposta

5

C'è una domanda sul blocco delle connessioni con una risposta con le istruzioni per la creazione di regole firewall in C#. Dovresti essere in grado di adattarlo a qualsiasi tipo di regola del firewall che immagino.

https://stackoverflow.com/a/1243026/12744

Il codice seguente crea una regola del firewall che blocca qualsiasi uscita connessioni su tutte le schede di rete:

using NetFwTypeLib; // Located in FirewallAPI.dll 
... 
INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FWRule")); 
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK; 
firewallRule.Description = "Used to block all internet access."; 
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT; 
firewallRule.Enabled = true; 
firewallRule.InterfaceTypes = "All"; 
firewallRule.Name = "Block Internet"; 

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); 
firewallPolicy.Rules.Add(firewallRule); 
+0

Questo è quello che stavo cercando "INetFwRule". Grazie – Marek