C#에서 클라이언트(로컬 컴퓨터)의 IP 주소를 확인하려면 System.Net 네임스페이스에 포함된 DNS 관련 클래스를 활용하면 됩니다. 전체 과정은 크게 두 단계로 나눌 수 있습니다.
1단계: 호스트 이름(Hostname) 조회
먼저 Dns.GetHostName() 메서드를 사용하여 현재 컴퓨터의 호스트 이름을 가져옵니다.
String hostName = string.Empty;
hostName = Dns.GetHostName();
Console.WriteLine("Hostname: " + hostName);이 메서드는 별도의 매개변수 없이 호출할 수 있으며, 로컬 컴퓨터에 등록된 NetBIOS 또는 DNS 호스트 이름을 문자열로 반환합니다.
2단계: IPHostEntry.AddressList 속성으로 IP 주소 가져오기
앞서 구한 호스트 이름을 Dns.GetHostEntry() 메서드에 전달하면 IPHostEntry 객체를 얻을 수 있습니다. 이 객체의 AddressList 속성에는 해당 호스트와 연결된 모든 IP 주소가 IPAddress 배열 형태로 담겨 있습니다.
IPHostEntry myIP = Dns.GetHostEntry(hostName);
IPAddress[] address = myIP.AddressList;전체 예제 코드
아래 전체 코드를 실행하면 시스템의 호스트 이름과 IP 주소 목록을 확인할 수 있습니다.
using System;
using System.Net;
class Program {
static void Main() {
String hostName = string.Empty;
hostName = Dns.GetHostName();
Console.WriteLine("Hostname: " + hostName);
IPHostEntry myIP = Dns.GetHostEntry(hostName);
IPAddress[] address = myIP.AddressList;
for (int i = 0; i < address.Length; i++) {
Console.WriteLine("IP Address {0}: {1}", i, address[i].ToString());
}
Console.ReadLine();
}
}실행 결과 예시
Hostname: DESKTOP-ABC123
IP Address 0: 192.168.1.10
IP Address 1: fe80::a1b2:c3d4:e5f6:7890%12참고 사항
한 대의 컴퓨터에는 유선 LAN, 무선 Wi-Fi, 가상 어댑터 등 여러 네트워크 인터페이스가 존재할 수 있으며, IPv4와 IPv6 주소가 함께 반환되므로 AddressList 배열에는 두 개 이상의 IP 주소가 포함될 수 있습니다. IPv4 주소만 필요한 경우 다음과 같이 AddressFamily 조건을 추가하여 필터링하는 것이 좋습니다.
var ipv4Addresses = address
.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork)
.ToList();이 방식은 System.Linq와 System.Net.Sockets 네임스페이스를 함께 사용하면 되며, 원하는 주소 체계만 정확하게 추출할 수 있습니다.