2012/08/28

c#, Security 이벤트로그에서 로그온 뽑기

다음 예는,.  서버에 로그온한 내역을 뽑아 달라는 요청이 있어서 급조한 내용이며, Message  문자열에서 정규편식을 통해서 로그온 이름과, IP주소(원격로그인) 와 로그온 시간을 뽑는 것.
c# 이기는 하지만,. PowerShell 로도 가능.^^

이벤트로그의 Message 문자열에서 필요한 것만 정규편식으로 파싱.
- Windows 2000
4624 (성공) , 4648(시도)
계정 이름:  UpdatusUser
원본 네트워크 주소: xxx.xxx.xxx.xxx
- Windows 2008 / R2
528(성공), 552 (시도)
사용자 이름: yeonpil
원본 네트워크 주소: xxx.xxx.xxx.xxx
로그온 유형:   5

운영체제 종류에 따라서 이벤트 코드가 다르므로 운영체제 구분 코드로 조건절 추가.


Version _ver = Environment.OSVersion.Version;
string _osVer = _ver.Major.ToString() + "." + _ver.Minor.ToString(); // 5.2 , 6.1


ManagementObjectSearcher searcher 
= new ManagementObjectSearcher("SELECT Message, TimeGenerated FROM Win32_NTLogEvent
        WHERE Logfile = 'Security' AND(" + _evtCode + ")");
        string _Message; string _TimeGenerated; 
        string _Account = ""; 
        string _IpAddress = ""; 
        foreach(ManagementObject obj in searcher.Get()) {
            _Message = obj["Message"].ToString();
            _TimeGenerated = obj["TimeGenerated"].ToString();
            Regex regex1 = new Regex(_AccountString + ":(.+)\r");
            Regex regex2 = new Regex("원본 네트워크 주소:(.+)\r");
            MatchCollection match1 = regex1.Matches(_Message);
            if (match1.Count > 0) {
                _Account = match1[1].Groups[1].Value.Trim();
            }
            Match match2 = regex2.Match(_Message);
            if (match2.Success) {
                _IpAddress = match2.Groups[1].Value.Trim();
            }
            Console.WriteLine(_Account + ":" + _IpAddress +
                "\t" + wmiDateConvert(_TimeGenerated));
        }

아래와 같은 코드도 사용 가능



        foreach(System.Diagnostics.EventLogEntry entry in _evt.Entries) {
            string _EventCode = Convert.ToString(entry.InstanceId & 0xFFFF);
            if (_EventCode == "552") {}
        }


참 쉽죠잉~~~ ? 헐.

닷넷프레임워크 3.5 / 4.0 인 경우에는 System.Diagnostics.Eventing.Reader  클래스를 이용해서도 가능

참고 http://phejndorf.wordpress.com/2011/03/31/using-c-and-linq-to-read-a-windows-eventlog-file-evtx/




댓글 없음:

댓글 쓰기

가장 많이 본 글