본문 바로가기
.Net

.NET - Audit.log Unix FileTime 계산하기

by 올엠 2021. 1. 18.
반응형

Linux에서 audit.log 나 일부 로그에서는 FileTime 으로 데이터를 표시하는데 사용되는 시간 표시를 위해 사용하는 FileTime은 윈도우와 다르게 계산된다. 

 

이를 계산하기 위해서는 단순히 DateTime에서 제공하는 FromFileTime을 이용하게 되면 전혀 다른 시간으로 기록되어 진다. 

Linux의 FileTime을 표시하려면 Linux의 표준 FileTime은 1970년1월1일 0시0분0초를 기준으로 초단위 더하기 방식으로 계산되기 때문에 다음과 같이 TimeOffset을 만들고 초단위로 더해주면 된다.

 

DateTimeOffset dto = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);

위 기준시간을 기준으로 초단위 값을 더해주면 되는데, 기본적으로 . 이후의 밀리세컨드 단위까지 표현하여야 하기 때문에 값을 밀리세컨드를 단위로 변경해준후에 기준시간에 더해주면 해당 로그의 기록시간을 얻을 수 있다.

audit.log 기준으로 다음과 같은 방식을 이용하면 되겠다.

if (subitem.StartsWith("audit"))
{
  string timeconvert = subitem[1].Replace("audit(", "");
  var datetime = timeconvert.Remove(14, timeconvert.Length-14);
  double intdate = Convert.ToDouble(datetime);
  DateTimeOffset dto = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
  intdate = intdate * 1000;
  dto = dto.AddMilliseconds(intdate);
  timevalue = string.Format("{0:yyyy-MM-ddTHH:mm:ss.FFFZ}", dto.DateTime);
}

 

위 코드를 이용하여 기준시를 구해보면 1609996627의 Unix FileTime은 2021년1월7일 5:17:07AM이 된다.

반응형