반응형

 

김종열

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;

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;

        }

    }

}

 

 

 

소스가 너무 간단해서 놀라고 있는 건 아니겠죠?

물론 이 말고도 여러가지가 있어요. Ping Test를 이용한 ResultIP로 그 값을 구하는 것이나

WMI를 이용해서 IP를 이용할 수 있습니다.

또한 유무선이나 virtualmachine 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


점점 이미지 파일이 없고 딱딱해져 가죠..
그리고 성능 검증편을 이쯤되면 해줘야 할 듯한데.. 흐흠.. 귀찮으네요 ^^

반응형

+ Recent posts