[C# 윈폼] C# 윈폼(Windows Form) CMD 창 실행하여, 방화벽(Firewall) 제어(켜기/끄기) 하는 방법


 

안녕하세요.

 

오늘은 C#으로 CMD 창을 실행시켜서 방화벽을 켜고 끄는 방법에 대해서 알려드리고자 합니다.


시나리오


1.   윈폼 프로젝트 생성

2.   버튼 컨트롤 2개 배치 (방화벽 켜기/ 방화벽 끄기)

3.   각각에 필요한 로직 작성

 

그럼 위의 시나리오 대로 실제 프로젝트를 진행해 나가보도록 하겠습니다.

 

1. 윈폼 프로젝트 생성 및 버튼 컨트롤 배치




위와 같이 버튼 컨트롤 두개를 배치하여 주시기 바랍니다.

방화벽 켜기 버튼 컨트롤의 Namebtn_turnOn으로 설정해 주시고, 방화벽 끄지 버튼 컨트롤의 Namebtn_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;

        }

    }

}

 

Colored by Color Scripter

cs

 

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());

        }

    }

}

 

Colored by Color Scripter

cs

 

여기까지 작성을 완료 하셨다면 모든 작업이 완료 된 것입니다.

 

실행 결과



 

이제 실제로 프로그램을 실행 시켜 주시고 각각 제어판에 들어 가셔서 방화벽 켜기/ 방화벽 끄기 버튼을 실행 시켜 보시면 실시간으로 방화벽이 켜졌다가 꺼지는 모습을 확인하실 수 있습니다.

 

감사합니다ㅎㅎ


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY