흑우마스터의 마법의 공간

[C#] IP 정보 조회 서비스 만들기 본문

프로그래밍/닷넷

[C#] IP 정보 조회 서비스 만들기

흑우마스터 2025. 1. 15. 18:15

IP 주소 정보를 조회해야 할 때, 간단한 REST API와 C#의 HttpClient를 활용하면 쉽게 구현할 수 있습니다. 이 포스트에서는 무료로 사용할 수 있는 ip-api 서비스를 활용해 C#으로 IP 정보 조회 서비스를 만드는 방법을 소개합니다.

목표

  • 사용자의 현재 IP 정보 또는 특정 IP 주소의 상세 정보를 가져옵니다.
  • IP 정보에는 위치(나라, 지역, 도시), 시간대, ISP 정보 등이 포함됩니다.

 

1. 사전 준비

우선, JSON 데이터를 파싱하기 위해 Newtonsoft.Json 라이브러리를 설치합니다. NuGet 패키지 매니저에서 아래 명령어를 실행합니다.

Install-Package Newtonsoft.Json

 

2. IpInfo 클래스 정의

IP API의 응답 데이터를 매핑할 클래스를 정의합니다. ip-api에서 반환하는 JSON 데이터를 기반으로 각 속성을 매핑할 수 있습니다. 아래는 IpInfo 클래스의 예입니다:

 

public class IpInfo
{
    public string Status { get; set; }
    public string Country { get; set; }
    public string CountryCode { get; set; }
    public string Region { get; set; }
    public string RegionName { get; set; }
    public string City { get; set; }
    public string Zip { get; set; }
    public double Lat { get; set; }
    public double Lon { get; set; }
    public string Timezone { get; set; }
    public string Isp { get; set; }
    public string Org { get; set; }
    public string As { get; set; }
    public string Query { get; set; }
}

 

 

3. IpService 클래스 작성

IP 정보를 가져오는 주요 로직을 작성합니다. 아래 코드는 HttpClient를 사용하여 IP 정보를 가져오는 서비스 클래스입니다:

public class IpService
{
    private static readonly HttpClient _httpClient;

    static IpService()
    {
        // HttpClient 기본 설정 (Timeout, BaseAddress 등)
        _httpClient = new HttpClient
        {
            Timeout = TimeSpan.FromSeconds(10) // 10초 타임아웃 설정
        };
    }

    /// <summary>
    /// IP 주소 정보를 가져옵니다.
    /// </summary>
    /// <param name="ipAddress">IP 주소 (기본값: 공백, 현재 사용자 IP 사용)</param>
    /// <returns>IP 정보 객체 또는 null</returns>
    public async Task<IpInfo> GetIpInfoAsync(string ipAddress = "")
    {
        try
        {
            string baseUrl = "http://ip-api.com/json";
            string requestUrl = string.IsNullOrWhiteSpace(ipAddress) ? baseUrl : $"{baseUrl}/{ipAddress}";

            // 비동기 요청 및 응답 처리
            string response = await _httpClient.GetStringAsync(requestUrl);
            return Newtonsoft.Json.JsonConvert.DeserializeObject<IpInfo>(response);
        }
        catch (HttpRequestException httpEx)
        {
            // HTTP 요청 관련 예외 처리
            Console.Error.WriteLine($"HTTP 요청 실패: {httpEx.Message}");
        }
        catch (Exception ex)
        {
            // 일반 예외 처리
            Console.Error.WriteLine($"오류 발생: {ex.Message}");
        }

        return null; // 실패 시 null 반환
    }
}

 

4. 사용 예제

이제 작성한 서비스를 활용하여 IP 정보를 가져오는 간단한 예제를 작성해 보겠습니다.

class Program
{
    static async Task Main(string[] args)
    {
        IpService ipService = new IpService();

        // 현재 IP 정보 조회
        IpInfo myIpInfo = await ipService.GetIpInfoAsync();
        Console.WriteLine($"Country: {myIpInfo.Country}, City: {myIpInfo.City}");

        // 특정 IP 주소 정보 조회
        IpInfo specificIpInfo = await ipService.GetIpInfoAsync("8.8.8.8");
        Console.WriteLine($"Country: {specificIpInfo.Country}, City: {specificIpInfo.City}");
    }
}

 

5. 결과

위 코드를 실행하면 아래와 같은 결과를 확인할 수 있습니다.

Country: United States, City: Mountain View
Country: United States, City: Mountain View