2011-12-13 3 views
5

내 응용 프로그램에 특정 포트를 열어야합니다.C에서 프로그래밍 방식으로 응용 프로그램별로 포트를 여는 방화벽 규칙을 만듭니다.

모든 포트에 대해 애플리케이션 당 INetFwAuthorizedApplication 규칙을 사용 해봤습니다.

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

INetFwOpenPort 대안을 사용하는 모든 appllications 하나 개의 포트를 연다.

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

프로그래밍 방식으로 프로그램별로 단일 포트만 프로그래밍 방식으로 열 수 있습니까? 방화벽 설정을 통해 수동으로 수행 할 수 있습니다.

+1

나는 이것이 그렇지 않으면 내 투자 할 수 없습니다 희망 보안 소프트웨어는 돈 낭비였다. 포트를 열 필요가 있는지를 100 % 확신 할 수 있습니까? 대부분의 응용 프로그램은 사용자에게 포트를 수행하는 방법에 대한 지침을 제공하지만 포트를 열지 않아도됩니다. "가능하다면 UDP를 열 필요가 없습니다"라는 말은 무엇을 의미합니까? –

+0

너무 많이 여는 대신 더 제한적으로 노력하고 있습니다. AuthorizedApplications 응용 프로그램에 응용 프로그램을 추가하면 모든 로컬 및 원격 포트에서 수신 대기/통신 할 수 있습니다. 정말 하나의 단일 포트에 대해서만 내 응용 프로그램을 열어야합니다. 방화벽 규칙을 수동으로 생성 할 때 응용 프로그램과 특정 포트만 지정할 수 있습니다. UDP와 TCP는 그다지 중요하지 않으며 방화벽에서 두 개의 인바운드 규칙을 가질 필요가 없다는 것을 의미합니다. 나는 이것이 제 2의 질문이기 때문에 제 질문에서 제거 할 것입니다. – Marek

답변

5

C#에서 방화벽 규칙을 만드는 방법에 대한 답변이있는 연결 차단에 대한 질문이 있습니다. 상상할 수있는 모든 종류의 방화벽 규칙에 대해이를 적용 할 수 있어야합니다.

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

다음 코드는 방화벽 규칙을 만듭니다 귀하의 모든 네트워크 어댑터에 블록 나가는 연결 :

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

이것은 "INetFwRule"을 찾고있는 것입니다. 감사 – Marek

관련 문제