javaでWindowsファイアウォールの規則を有効化&無効化にする方法です。

やりたい事は簡単なんですが調べると以外と出てこなかったりするんですよね…。

まあそんな感じでやってみると出来たので載せておきます。

やりたいこと

やりたい事としては単純で簡単だと思います。

今回のやり方としては、以下の方法です。

PowerShellを使いファイアウォールの有効化&無効化のコマンドをjavaで実行する。

PowerShellでファイアウォールを有効無効にするやり方は調べるとすぐ出てくると思います。

コマンド

ファイアウォールを有効化するコマンド。

"Enable-NetFirewallRule -DisplayName "ファイアウォールの名前"

ファイアウォールを無効化コマンド。

"Disable-NetFirewallRule -DisplayName "ファイアウォールの名前"

実装

以下は一例ですが、PowerShellのコマンドを実行する処理です。

以下のような感じを参考にするだけでコマンド実行できます。

Process process;
String command = "ファイアウォールの有効無効のコマンド";
ProcessBuilder pb = new ProcessBuilder("powershell",command);

process = pb.start();

boolean result = process.waitfor(1000,TimeUnit.MILLISECONDS);

上記をメソッド化して、処理を呼び出すように書きました。呼び出す際は、コマンドを渡してます。

class sample{
 public static void main(String args[]){
   // FirewallTestという名前の設定を有効化
   String command = "Enable-NetFirewallRule -DisplayName \"FirewallTest\"";
   firewallSettings(command);

   // FirewallTestという名前の設定を無効化
   String command = "Disable-NetFirewallRule -DisplayName \"FirewallTest\"";
   firewallSettings(command);
 }
} 

そして上の処理から呼び出されコマンドが以下で実行されます。

public void firewallSettings(String command){
 try{
        Process process;

        ProcessBuilder pb = new ProcessBuilder("powershell",command);

        process = pb.start();

        // コマンドの完了を10秒待つ
        boolean result = process.waitfor(1000,TimeUnit.MILLISECONDS);
        
        if(!result){
           // コマンド失敗した場合Failedを出力
          System.out.println("Failed");
        }

 } catch (IOException e){
   throw e;
 } catch (InterruptedException e){
   throw e;
 }
}

コード全体

class sample{
 public static void main(String args[]){
   // FirewallTestという名前の設定を有効化
   String command = "Enable-NetFirewallRule -DisplayName \"FirewallTest\"";
   firewallSettings(command);

   // FirewallTestという名前の設定を無効化
   String command = "Disable-NetFirewallRule -DisplayName \"FirewallTest\"";
   firewallSettings(command);
 }

public void firewallSettings(String command){
 try{
        Process process;

        ProcessBuilder pb = new ProcessBuilder("powershell",command);

        process = pb.start();

        // コマンドの完了を10秒待つ
        boolean result = process.waitfor(1000,TimeUnit.MILLISECONDS);
        
        if(!result){
           // コマンド失敗した場合Failedを出力
          System.out.println("Failed");
        }

 } catch (IOException e){
   throw e;
 } catch (InterruptedException e){
   throw e;
 }
}

}