프로그래밍/C#

[C#] 프로그래밍으로 네트워크 연결 설정/ 연결 끊기

Victory_HA 2021. 7. 15. 11:15

GetAllNetworkInterfaces메서드

// Get Adapter list
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
var i = 0;
Console.WriteLine($"Select Disconnenct Adapter.");
foreach (NetworkInterface adapter in adapters)
{
    var properties = adapter.GetIPv4Statistics();

    Console.WriteLine($"Adapter ID : {adapter.Id}");                        // Adapter ID
    Console.WriteLine($"Adapter Name : {adapter.Name}");                    // Adapter Name
    Console.WriteLine($"Adapter Type : {adapter.NetworkInterfaceType}");    // Adapter 종류
    Console.WriteLine($"Adapter Status : {adapter.OperationalStatus}");     // Adapter 연결 상태
    Console.WriteLine($"============================");
}

Adapter선택하여 Network 연결/ 연결 끊기

  • 아래 예제로 Adapter를 연결, 연결 끊기를 할 수 있습니다.
  • 아래 메서드는 AdapterName을 파라미터로 활용합니다.

Network 연결

static void EnableEthernet(string adapterName)
{
    System.Diagnostics.ProcessStartInfo psi =
            new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + adapterName + "\" enable");
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo = psi;
    p.Start();
}

Network 연결 끊기

static void DisableEthernet(string adapterName)
{
    System.Diagnostics.ProcessStartInfo psi =
        new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + adapterName + "\" disable");
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo = psi;
    p.Start();
}

테스트를 위한 샘플코드

  • 샘플코드 동작 순서
    • 선택한 Adapter의 연결 해제합니다.
    • 일정 시간 뒤에 선택한 Adapter의 재 연결 합니다.
static void Main(string[] args)
{
    // Get Adapter list
    NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
    var i = 0;
    Console.WriteLine($"Select Disconnenct Adapter.");
    foreach (NetworkInterface adapter in adapters)
    {
        var properties = adapter.GetIPv4Statistics();

        Console.WriteLine($"No. {i++} ");
        Console.WriteLine($"Adapter ID : {adapter.Id}");                        // Adapter ID
        Console.WriteLine($"Adapter Name : {adapter.Name}");                    // Adapter Name
        Console.WriteLine($"Adapter Type : {adapter.NetworkInterfaceType}");    // Adapter 종류
        Console.WriteLine($"Adapter Status : {adapter.OperationalStatus}");     // Adapter 연결 상태
        Console.WriteLine($"============================");
    }

    int selectAdapter = int.Parse(Console.ReadLine());                          

    Console.WriteLine($"Enter Elapse time (seconds) up on 5s: ");               // Delay시킬 Time을 최소 5초로 입력하도록 권장
    var delayTime = int.Parse(Console.ReadLine());
    if (delayTime < 5)
    {
        delayTime = 5;
        Console.WriteLine($"\nElapse Time : {delayTime}s");
    }

    DisableEthernet(adapters[selectAdapter].Name);                              // 선택한 네트워크 연결 끊기
    Thread.Sleep(delayTime * 1000);                                             // DelayTime
    EnableEthernet(adapters[selectAdapter].Name);                               // 선택한 네트워크 재 연결
}

static void EnableEthernet(string adapterName)
{
    System.Diagnostics.ProcessStartInfo psi =
            new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + adapterName + "\" enable");
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo = psi;
    p.Start();
}

static void DisableEthernet(string adapterName)
{
    System.Diagnostics.ProcessStartInfo psi =
        new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + adapterName + "\" disable");
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo = psi;
    p.Start();
}

'프로그래밍 > C#' 카테고리의 다른 글

[C#] Linq - Enumerable.Aggregate  (0) 2021.10.23
[C#] 확장 메서드 (Extension Method)  (0) 2021.10.19
[C#] 대리자 (delegate)  (0) 2021.09.26
[C#] 리플렉션 (Reflection)  (0) 2021.09.12
[C#] DateTime.Ticks 속성 변환하기  (0) 2021.07.29