김종열
MS SQL Server MVP
엔트리브 소프트
Mssql에 접속하는 Host_name을 아는 건 별 어려운 건 아닙니다.
그런데 접속자의 IP를 구하기 위해서는 어떻게 하나요?
Computername (흔히들 hostname이라는 함수로 얻어지는)을 이용해서 IP를 구하는 function을 하나 만들었습니다.
1. 기존 프로젝트인 PRJ_CLR를 OPEN합니다.
2. 사용자 정의 함수를 추가시킵니다. (PROJECT에서 오른 마우스를 클릭 > ADD > NEW ITEM)
3. NEW ITEM에서 사용자 정의 함수를 선택하고 이름을 “UDF_GET_IP.CS”라고 입력
4. 여기까지 하고 아래와 같은 소스를 입력한다. (소스는 첨부하였습니다.)
using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Net; using System.Collections; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction] public static SqlString Udf_Get_IP(string hname) { try { IPHostEntry _IP = Dns.GetHostEntry(hname); string str_ip = _IP.AddressList[0].ToString(); return (SqlString)str_ip; } catch { return null; } } }
using System;
소스가 너무 간단해서 놀라고 있는 건 아니겠죠?
물론 이 말고도 여러가지가 있어요. Ping Test를 이용한 ResultIP로 그 값을 구하는 것이나
WMI를 이용해서 IP를 이용할 수 있습니다.
또한 유무선이나 virtual을 machine등 IP를 두개 이상 가지고 계신분의 것은 정확하지 않아요..
_IP.AddressList[0].ToString()이런 말에서 보듯 이미 복수개 이상의 IP가 있을 수 있다는 거죠.
이건 상위 하나만 잡는 다는 뜻이겠죠. 만약 이 리스트를 다 받으시려고 한다면
당연히 Table Return을 만드셔야 겠죠.
5. Visual Studio의 컴파일 및 배포를 해줍니다.
USE YOULYDB GO SELECT IP_ADDR = DBO.UDF_GET_IP('YOULYN') /* ip_addr --------------- 192.168.**.*** (1 row(s) affected) */
참고로 select ip_addr = dbo.udf_get_ip(host_name()) 이런 구문도 얼마든지 가능합니다.
당연히 hostname이 없다면 Null을 리턴합니다.
실제로는 보이실 겁니다. 사무실의 내부 아이피지만 IP는 가렸습니다.
도움파일 : Udf_Get_IP.CS
점점 이미지 파일이 없고 딱딱해져 가죠..
그리고 성능 검증편을 이쯤되면 해줘야 할 듯한데.. 흐흠.. 귀찮으네요 ^^
'연구개발 > CLR' 카테고리의 다른 글
CLR - 문자열 중 숫자만 반환하는 FUNCTION (0) | 2009.06.22 |
---|---|
CLR 강좌 - GREATEST_LEAST 구현하기 (0) | 2009.06.22 |
CLR 강좌 - TEXT파일 읽기2 (0) | 2009.06.22 |
등록된 DLL 정보 확인하기 (0) | 2009.06.22 |
CLR 강좌 - TEXT파일 읽기 (0) | 2009.06.22 |