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

  1. C#에서Dns.GetHostEntry()함수를 사용하여 로컬 IP 주소 가져 오기
  2. C#에서Socket.LocalEndPoint속성을 사용하여 로컬 IP 주소 가져 오기
  3. C#에서 Linq를 사용하여 로컬 IP 주소 가져 오기
  4. C#에서NetworkInterface클래스를 사용하여 로컬 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을 전달하여 함수 호출에 지정해야합니다.