และทำการ generate Image ที่แสดงลักษณะการใช้งานของ user ออกมา
(จริงๆแล้วมันไม่ต้องเวอร์ขนาดนี้ก็ได้ แต่อยากลอง feature ต่างๆดู)
เริ่มแรกสิ่งที่ต้อง solve ก็คือการ parse wtmp file
ขอยกตัวอย่างเฉพาะเจาะจงลงไปที่ wtmp file ที่ได้จาก AIX แล้วกัน
ใน AIX wtmp file จะมี record size = 648 byte
(AIX version ใหม่ ของเก่าขนาดเล็กกว่านี้เยอะ)
วิธีการที่ผมใช้ก็คือ อ่าน file ทีละ 648 byte เป็น string จากนั้นก็ส่งไป
ให้
parseRecord
ทำงาน
def parseFile(fileName)
list = Array.new
begin
File.open(fileName, 'r') do |file|
while (! file.eof)
tmp = parseRecord(file.read(648))
wtmp = Wtmp.new(tmp)
list << wtmp
end
end
rescue
end
return list
end
ตัว
parseRecord
ก็จะใช้ method unpack เข้ามาช่วยmethod นี้จะ return Array ของ object โดยเราต้องกำหนด template
ที่จะใช้ในการ parse
def parseRecord(str)
str.unpack("A256A14A64x2Nnx6Nnna256x36")
end
ความหมายของ template ที่ใช้
- A256 -> return String ที่ตัดเอา white space ออกแล้ว
ส่วนค่า 256 ก็คือ ความยาวของ data ที่ต้องการอ่านขึ้นมา ในที่นี้คือ 256 byte - x2 -> skip ข้ามไป 2 byte
- N -> integer ความยาว 4 byte
- n -> short (2 byte)
Link
Document ของ unpack method ใน String class
No comments:
Post a Comment