2016-07-11 12 views
1

Windowsファイアウォールでポートが開いているかどうか確認したいと思います。Windowsファイアウォールのルールをチェックするには?

私はnetshのを使用して、この方法を見つけた:

...

ルールが存在するかどう返します
netsh advfirewall firewall show rule name="My rule" 

しかし、Windowsの言語に依存し、これは異なるメッセージが返されます。私はこれをより良い方法で解決しようとしています。結果がYesまたはNoTrueまたはFalseで、ローカライズされた文字列ではありません。

ヒントはありますか?

+0

サードパーティのモニタがあればどうしますか? また、 "advfirewall" AFAIRはVistaまたはWin7で、2000/XPにはこのようなコマンドはありませんでした。AFAIR –

+0

apiがあります。あなたはそれを探しましたか? –

+0

これを試してください[高度なセキュリティを備えたWindowsファイアウォールを使用したスクリプトAPIとDelphi](https://theroadtodelphi.com/2013/11/21/using-the-windows-firewall-with-advanced-security-scripting-api-and -delphi /) – RRUZ

答えて

3

AS: "advfirewall"コマンドとその基礎となるサービスがWindows Vistaで導入されました。 Windows 2000/XPはそれを持っていませんし、それをサポートするためには、別のインターフェースを使うべきです。

他社製のファイアウォール以外のファイアウォールがインストールされているコンピュータ(例:ウイルス対策スイートの一部)と同じです。

一般的には、Vista +ではINetFwRules COMオブジェクトを取得し、その中のすべてのルールを列挙し、それがあなたのポートをカバーしているかどうかすべてのルールをチェックする必要があります。

ルールを https://theroadtodelphi.com/2013/11/21/using-the-windows-firewall-with-advanced-security-scripting-api-and-delphi/#Enumeratingファイアウォールルールを取得し、列挙するための例に従う

var 
CurrentProfiles : Integer; 
fwPolicy2  : OleVariant; 
RulesObject  : OleVariant; 
rule   : OleVariant; 
oEnum   : IEnumvariant; 
iValue   : LongWord; 

    fwPolicy2 := CreateOleObject('HNetCfg.FwPolicy2'); 
    RulesObject := fwPolicy2.Rules; 
    CurrentProfiles := fwPolicy2.CurrentProfileTypes; 

    ..... 

    Writeln('Rules:'); 

    oEnum   := IUnknown(Rulesobject._NewEnum) as IEnumVariant; 
    while oEnum.Next(1, rule, iValue) = 0 do 
    begin 
    if (rule.Profiles And CurrentProfiles)<>0 then 
    begin 
     Writeln(' Rule Name:   ' + rule.Name); 
     Writeln(' ----------------------------------------------'); 
     Writeln(' Description:  ' + rule.Description); 
     Writeln(' Application Name: ' + rule.ApplicationName); 
     Writeln(' Service Name:  ' + rule.ServiceName); 

     if (rule.Protocol = NET_FW_IP_PROTOCOL_TCP) or (rule.Protocol = NET_FW_IP_PROTOCOL_UDP) then 
     begin 
      Writeln(' Local Ports:  ' + rule.LocalPorts); 
      Writeln(' Remote Ports:  ' + rule.RemotePorts); 
      Writeln(' LocalAddresses:  ' + rule.LocalAddresses); 
      Writeln(' RemoteAddresses: ' + rule.RemoteAddresses); 
     end; 

    ..... 

    end; 

OTOH結合静的ではなくOleVariantを使用すると、より速く、より信頼性があるべきです、チェックhttps://github.com/yypbd/yypbd-Delphi-HeaderPorting/tree/master/example/FirewallExample

関連する問題