안녕하세요.
오늘은 C#으로 CMD 창을 실행시켜서 방화벽을 켜고 끄는 방법에 대해서 알려드리고자 합니다.
시나리오
1. 윈폼 프로젝트 생성
2. 버튼 컨트롤 2개 배치 (방화벽 켜기/ 방화벽 끄기)
3. 각각에 필요한 로직 작성
그럼 위의 시나리오 대로 실제 프로젝트를 진행해 나가보도록 하겠습니다.
1. 윈폼 프로젝트 생성 및 버튼 컨트롤 배치
위와 같이 버튼 컨트롤 두개를 배치하여 주시기 바랍니다.
방화벽 켜기 버튼 컨트롤의 Name은 btn_turnOn으로 설정해 주시고, 방화벽 끄지 버튼 컨트롤의 Name은 btn_trunOff로 설정해 주시기 바랍니다.
그럼 이제 본격적으로 C#에서 Command 속성창을 실행하여 방화벽을 제어하는 방법을 소스코드를 통하여 알려드리겠습니다.
그 전에, 방화벽을 CMD창에서 켜고 끄는 명령어는 기본적으로 아래와 같습니다.
방화벽 켜기 명령어 - netsh advfirewall set allprofiles state on
방화벽 끄기 명령어 - netsh advfirewall set allprofiles state off
그리고 해당 명령어는 CMD창이 반드시 관리자 모드로 실행 시켜서 명령어 실행을 시켜 주어야 합니다.
그럼 바로 위 내용들을 C# 코드로 작성해 보도록 하겠습니다.
1. Program.cs 코드 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Security.Principal; using System.Threading.Tasks; using System.Windows.Forms;
namespace FireWall { static class Program { /// <summary> /// 해당 응용 프로그램의 주 진입점입니다. /// </summary> [STAThread] static void Main() { if (IsAdministrator() == false) { try { ProcessStartInfo procInfo = new ProcessStartInfo(); procInfo.UseShellExecute = true; procInfo.FileName = Application.ExecutablePath; procInfo.WorkingDirectory = Environment.CurrentDirectory; procInfo.Verb = "runas"; Process.Start(procInfo); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
return; }
Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }
/// <summary> /// 방화벽 권한 획득 메서드 /// </summary> /// <returns></returns> public static bool IsAdministrator() { WindowsIdentity identity = WindowsIdentity.GetCurrent(); if (null != identity) { WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } return false; } } }
|
MainForm.cs 코드 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Security.Principal; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace FireWall { public partial class Form1 : Form { public Form1() { InitializeComponent();
this.btn_turnOn.Click += uiBtn_TurnOnClick; this.btn_turnOff.Click += uiBtn_TurnOffClick; }
/// <summary> /// 방화벽 켜기 버튼 이벤트 핸들러 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void uiBtn_TurnOnClick(object sender, EventArgs e) { Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.UseShellExecute = false; cmd.Start();
//방화벽 해제 명령어 입력 cmd.StandardInput.Write(@"netsh advfirewall set allprofiles state on" + Environment.NewLine); cmd.StandardInput.Flush(); cmd.StandardInput.Close(); cmd.WaitForExit(); Console.WriteLine(cmd.StandardOutput.ReadToEnd()); }
/// <summary> /// 방화벽 끄기 버튼 이벤트 핸들러 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void uiBtn_TurnOffClick(object sender, EventArgs e) { Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.UseShellExecute = false; cmd.Start();
//방화벽 해제 명령어 입력 cmd.StandardInput.Write(@"netsh advfirewall set allprofiles state off" + Environment.NewLine); cmd.StandardInput.Flush(); cmd.StandardInput.Close(); cmd.WaitForExit(); Console.WriteLine(cmd.StandardOutput.ReadToEnd()); } } }
|
여기까지 작성을 완료 하셨다면 모든 작업이 완료 된 것입니다.
실행 결과
이제 실제로 프로그램을 실행 시켜 주시고 각각 제어판에 들어 가셔서 방화벽 켜기/ 방화벽 끄기 버튼을 실행 시켜 보시면 실시간으로 방화벽이 켜졌다가 꺼지는 모습을 확인하실 수 있습니다.
감사합니다ㅎㅎ
'C# > Windows Form' 카테고리의 다른 글
[C# 윈폼] 윈폼 컨트롤(Control) 마우스 휠(Mouse Wheel) 이벤트 제어 하는 방법 (0) | 2019.10.09 |
---|---|
[C# 윈폼] TextBox, Button (텍스트박스, 버튼) Enter Key(엔터키) 이벤트 발생 하기 (1) | 2019.10.03 |
[C# 문법] C# CMD창 실행하기, 명령어 실행시키는 방법 (1) | 2019.09.09 |
[윈폼 컨트롤] 윈폼 컬러(Color) 콤보박스(ComboBox) 만드는 방법 (0) | 2019.09.06 |
[윈폼 컨트롤] Windows Form(윈폼) 콤보박스(ComboBox) 컨트롤 사용 방법 (0) | 2019.09.04 |
이 글을 공유하기