IPHostEntry.AddressList 속성 활용하기
C#에서 로컬 컴퓨터의 IP 주소를 확인하려면 System.Net 네임스페이스의 IPHostEntry.AddressList 속성을 사용하면 됩니다. 이 속성은 지정한 호스트 이름에 연결된 모든 IP 주소(IPv4 및 IPv6)를 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 + 1, address[i].ToString());
}
Console.ReadLine();
}
}
코드 동작 원리
Dns.GetHostName() 메서드는 현재 실행 중인 컴퓨터의 호스트 이름을 문자열로 반환합니다. 이 호스트 이름을 Dns.GetHostEntry()에 전달하면 DNS 조회를 통해 해당 호스트의 정보가 담긴 IPHostEntry 객체를 얻을 수 있으며, 그 안의 AddressList 속성에서 IP 주소 배열을 꺼내 사용할 수 있습니다.
마지막의 for 루프는 배열에 담긴 모든 IP 주소를 하나씩 출력합니다. 한 대의 컴퓨터에는 여러 개의 네트워크 어댑터(이더넷, Wi-Fi, 가상 어댑터 등)가 있을 수 있으므로, 결과로 여러 개의 IP 주소가 표시되는 것이 정상입니다.
참고 사항
반환되는 목록에는 IPv6 주소도 포함될 수 있습니다. IPv4 주소만 필요하다면 다음과 같이 AddressFamily.InterNetwork 조건으로 필터링할 수 있습니다.
var ipv4Addresses = address
.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork)
ToList();
또한 이 코드를 사용하려면 프로젝트에 System.Net 네임스페이스 참조가 반드시 포함되어 있어야 하며, DNS 조회가 실패할 경우 SocketException이 발생할 수 있으므로 필요에 따라 try-catch 블록으로 예외 처리를 추가하는 것이 좋습니다.