Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 구글지도
- xcode13
- iOS노치
- Android
- .net maui
- hot reload
- 흑우마스터
- MAUI
- 자마린
- 배포
- 망할
- ABLY
- 비주얼스튜디오2022
- n8n
- 구글맵
- 닷넷
- 개발
- v
- 프로그래밍
- SecureStorage
- AWS
- Cloudflare
- Xamarin Forms
- Xamarin
- vpc
- 지도
- 안드로이드
- c#
- aws lambda
- ASP.NET Web API
Archives
- Today
- Total
흑우마스터의 마법의 공간
[C#] IP 정보 조회 서비스 만들기 본문
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