C#에서 로컬 IP 주소 가져 오기

Muhammad Maisam Abbas 2024년2월16일
  1. C#에서Dns.GetHostEntry()함수를 사용하여 로컬 IP 주소 가져 오기
  2. C#에서Socket.LocalEndPoint속성을 사용하여 로컬 IP 주소 가져 오기
  3. C#에서 Linq를 사용하여 로컬 IP 주소 가져 오기
  4. C#에서NetworkInterface클래스를 사용하여 로컬 IP 주소 가져 오기
C#에서 로컬 IP 주소 가져 오기

이 자습서에서는 C#에서 컴퓨터의 로컬 IP 주소를 가져 오는 방법에 대해 설명합니다.

C#에서Dns.GetHostEntry()함수를 사용하여 로컬 IP 주소 가져 오기

Dns클래스는 인터넷의 호스트와 관련된 정보를 가져옵니다. Dns클래스에는 C#의 DNS 관련 기능에 대한 많은 메서드가 있습니다. Dns.GetHostEntry()함수를 사용하여 호스트의 IP 주소.

다음 코드 예제는 C#에서Dns.GetHostEntry()함수를 사용하여 시스템의 로컬 IP 주소를 얻는 방법을 보여줍니다.

using System;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      String strHostName = string.Empty;
      IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
      IPAddress[] addr = ipEntry.AddressList;

      for (int i = 0; i < addr.Length; i++) {
        Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
      }
    }
  }
}

출력:

IP Address 0: fe80::1db8:23a7:6483:8976%20
IP Address 1: 192.168.43.239

위의 코드에서Dns.GetHostName()함수를Dns.GetHostEntry()함수의 매개 변수로 전달하여 C#에서 로컬 머신의 IP 주소를 가져 왔습니다. 이 방법의 유일한 문제는 시스템의 모든 IP 주소를 제공한다는 것입니다. 특정 IP 주소를 얻으려면 C#으로 다음 코드를 작성해야합니다.

using System;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      var host = Dns.GetHostEntry(Dns.GetHostName());
      foreach (var ip in host.AddressList) {
        if (ip.AddressFamily == AddressFamily.InterNetwork) {
          Console.WriteLine("IP Address = " + ip.ToString());
        }
      }
    }
  }
}

출력:

IP Address = 192.168.43.239

위 코드에서ip.AddressFamilyAddressFamily.InterNetwork와 같은지 확인했습니다. ? view = net-5.0). 이 조건은ip변수의 IP 주소가 IPv4 주소인지 여부를 확인합니다. 위의 코드는 우리 컴퓨터의 IPv4 주소 만 반환합니다. 시스템의 IPv6 주소를 얻으려면AddressFamily.InterNetwork대신AddressFamily.InterNetworkV6속성을 사용할 수 있습니다.

C#에서Socket.LocalEndPoint속성을 사용하여 로컬 IP 주소 가져 오기

여러 개의 IP 주소가있을 때 머신의 로컬 IP 주소를 얻는보다 정확한 방법은 UDP 소켓을 연결 한 다음 로컬 엔드 포인트를 읽는 것입니다. C#의 Socket 클래스는 네트워크 통신 기능을 제공하는 Berkeley 소켓 인터페이스를 구현합니다. 다음 코드 예제는 Socket.LocalEndPoint 속성을 사용하여 C#에서 컴퓨터의 로컬 IP 주소를 결정하는 방법을 보여줍니다.

using System;
using System.Net;
using System.Net.Sockets;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      string localIP = string.Empty;
      using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) {
        socket.Connect("8.8.8.8", 65530);
        IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
        localIP = endPoint.Address.ToString();
      }
      Console.WriteLine("IP Address = " + localIP);
    }
  }
}

출력:

IP Address = 192.168.43.239

위 코드에서socket소켓을 로컬 머신에 연결하고socket.LocalEndPoint속성을 사용하여socket의 로컬 엔드 포인트를 추출했습니다. endPoint.Address속성을 사용하여endPoint의 IP 주소를 얻었습니다.

C#에서 Linq를 사용하여 로컬 IP 주소 가져 오기

Linq 또는 언어 통합 쿼리는 C#에서 SQL 기능을 제공합니다. 또한 Linq 및Dns.GetHostEntry()함수를 사용하여 C#에서 컴퓨터의 로컬 IP 주소를 가져올 수 있습니다.

다음 코드 예제는 Linq를 사용하여 C#에서 컴퓨터의 로컬 IP 주소를 얻는 방법을 보여줍니다.

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {
        Console.WriteLine("No Network Available");
      }

      IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

      var ippaddress =
          host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
      Console.WriteLine(ippaddress);
    }
  }
}

출력:

192.168.43.239

위 코드에서 C#의Dns.GetHostEntry()함수와 함께 Linq를 사용하여 머신의 로컬 IPv4 주소를 결정했습니다. 나머지 코드는 첫 번째 예제와 유사합니다. 유일한 차이점은Dns.GetHostEntry()함수가 반환 한 주소 목록에서 IPv4 주소를 하나만 추출했다는 것입니다.

C#에서NetworkInterface클래스를 사용하여 로컬 IP 주소 가져 오기

NetworkInterface클래스에는 로컬 컴퓨터의 네트워크 인터페이스에 대한 데이터가 포함됩니다. 네트워크 인터페이스에 대한 통계 및 구성을 제공합니다. NetworkInterface클래스의 GetAllNetworkInterfaces()함수 로컬 머신의 모든 네트워크 인터페이스를 제공합니다. NetworkInterface클래스의 NetworkInterfaceType속성이 사용됩니다. 네트워크 인터페이스의 유형을 가져옵니다.

다음 코드 예제는 이러한 모든 함수를 사용하여 C#에서 로컬 컴퓨터의 로컬 IP 주소를 얻는 방법을 보여줍니다.

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address {
  class Program {
    public static void getLocalIPAddressWithNetworkInterface(NetworkInterfaceType _type) {
      string output = "";
      foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) {
        if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up) {
          foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) {
            if (ip.Address.AddressFamily == AddressFamily.InterNetwork) {
              output = ip.Address.ToString();
            }
          }
        }
      }
      Console.WriteLine("IP Address = " + output);
    }
    static void Main(string[] args) {
      getLocalIPAddressWithNetworkInterface(NetworkInterfaceType.Wireless80211);
    }
  }
}

출력:

IP Address = 192.168.43.239

위 코드에서 C#의NetworkInterface클래스를 사용하여 로컬 컴퓨터의 WLAN IPv4 주소를 검색했습니다. 위의 코드는 로컬 컴퓨터에서 모든 유형의 IP 주소를 가져 오는 데 사용할 수 있습니다. 예를 들어, 이더넷 인터페이스의 IP 주소를 얻으려면NetworkInterfaceType.Ethernet을 전달하여 함수 호출에 지정해야합니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

관련 문장 - Csharp Network