วิเคราะห์ Radius ด้วย Pascal
เว็บเพจสำรอง (Backup Webpages) : thaiabc.com | thaiall.korattown.com | perlphpasp.com | thaiall.com
ปรับปรุง : 2551-01-11 (เพิ่ม config router)
วิเคราะห์ Radius ด้วย Pascal
Radius คือโปรแกรมที่ช่วยตรวจสอบสิทธิ์ของผู้ใช้ ที่โทรศัพท์เข้ามาขอใช้ Internet จาก ISP
ท่านสามารถจำลองสถานการ แล้ว download TP7 556Kb หรือ router.exe 8Kb ไปทดสอบดูได้ครับ
  1. Radius คืออะไร
  2. Crontab คือการตั้งเวลาให้โปรแกรมประมวลผล
  3. โปรแกรม startup : run ทุกชั่วโมง อัตโนมัติ
  4. โปรแกรม runacct : run วันละ 1 ครั้ง อัตโนมัติ
  5. ตัวอย่างผลลัพธ์จาก Radius ที่จะใช้ pascal สรุปผลออกมา
  6. โปรแกรม router.pas
  7. ทำรายงานใน excel
Radius คืออะไร

Radius คือโปรแกรมที่ช่วยตรวจสอบสิทธิ์ของผู้ใช้ ที่โทรศัพท์เข้ามาขอใช้ Internet จาก ISP ซึ่งจะเป็นโปรแกรมที่ run อยู่ตลอดเวลา มีลักษณะเป็น Radius server เหมือนพวก Web server หรือ Mail server ที่โปรแกรมต้องตื่นตลอดเวลา เพื่อรอให้บริการกับผู้ใช้
เมื่อใดก็ตามที่มีผู้ใช้ หมุ่นโทรศัพท์จากที่บ้านเข้ามา Modem ที่เราติดตั้งไว้ ตัว Modem จะวิ่งไปที่ rounter ซึ่งจะถูก config ให้ส่งข้อมูล เช่น User และ Password ไปให้กับ Radius server เพื่อตรวจสอบว่ามี account ใน server หรือไม่ ถ้ามีก็จะส่งคำอนุญาติให้ connect ได้ แล้วบันทึกข้อมูลว่าเริ่ม connect เมื่อใด
เราสามารถตรวจดูว่า โปรแกรม radius ทำงานอยู่หรือไม่ด้วยคำสั่ง ps -ef ก็จะเห็นคำสั่งดังข้างล่างนี้ ซึ่งเป็นผลจากการ run radius อยู่ใน server หรือการทำงานของ web server หรือ mail server ดังข้างล่างนี้
    root   195   193  0   Oct 27 ?        0:02 /usr/local/etc/radius/bin/radiusd
    www   5877   199  0 14:30:23 ?        0:00 /usr/local/etc/httpd/httpd
    www   5821   199  0 13:55:01 ?        0:00 /usr/local/etc/httpd/httpd
    root   179     1  0   Oct 27 ?        0:00 /usr/lib/sendmail -bd -q1h
    

โดยการขอ Radius เพื่อจัดเก็บสถิติ ต้องทำงานคู่กับ crontab ซึ่งจะอธิบายในหัวข้อต่อไป

Crontab คือการตั้งเวลาให้โปรแกรมประมวลผล

Last updated [April 2001] :วิธีการในบทเรียนนี้จะแตกต่างกับที่ใช้ใน Redhat 6.2 ที่ใช้ที่ www.isinthai.com เพราะวิธีการนี้เขียนมาจาก Unix ในเครื่อง Sun ดังนั้นหากต้องเปรียบเทียบบางอย่าง ต้องดูทั้งที่นี่ และที่ www.isinthai.com เพราะที่นั่นใช้ Redhat 6.2 เป็น Case study
สิ่งสำคัญที่ควรทราบ crontab เป็นคำสั่งที่เหมาะกับผู้ควบคุมระบบเท่านั้น ถ้าท่านไม่ใช่ผู้ควบคุมแล้วไปใช้คำสั่งนี้โดยพลการ อาจถูกลบ account ได้ตลอดเวลา เพราะท่านอาจกำหนดคำสั่งใน crontab จนทำให้ระบบ รวนได้ นั่นคือปัญหา
Crontab มีประโยชน์มาก เพราะสามารถตั้งเวลาให้ประมวลผลโปรแกรมใดก็ได้ ซึ่งการนำไปใช้ ผู้ใช้ต้องประยุกต์ให้งานเอง เช่นการสั่งปิดเครื่องทุกวันตอน 3 ทุ่ม หรือสั่งให้ restart ตัวเอง ทุกวันที่ 1 ของเดือน หรือสั่งให้ clear log ทุกสัปดาห์ เป็นต้น นอกจากนี้ระบบยังยอมให้กำหนด crontab ของผู้ใช้แต่ละคนได้ แต่ต้องกำหนด username ไว้ดังตัวอย่างข้างล่างนี้ ว่าจะกำหนด crontab ให้กับ user คนใด
    รูปแบบคำสั่งที่ได้จากคำสั่ง man crontab
    NAME
         crontab - user crontab file
    
    SYNOPSIS
         crontab [ filename ]
         crontab [-elr] username
    
    DESCRIPTION
         The crontab utility manages a user's  access  with  cron  by
         copying,  creating, listing, and removing crontab files.  If
         invoked without options, crontab copies the specified  file,
         or the standard input if no file is specified, into a direc-
         tory that holds all users' crontabs.
    

รูปแบบของ crontab มี 2 ส่วน คือ ตัวเลขกำหนดเวลา และคำสั่งที่กำหนด โดยเลข 5 ตัว ซึ่งกำหนดเวลาให้ประมวลผลคำสั่งที่ต่อท้าย เมื่อผมใช้คำสั่ง man crontab จะเห็นบรรทัดที่อธิบายเกี่ยวกับเรื่องเลข 5 ตัวไว้ดังนี้ (สำหรับ * หมายถึงไม่กำหนดเวลา เป็นช่องเปิดไว้) The first five are integer patterns that specify the following:
    minute (0-59),
    
    hour (0-23),
    day of the month (1-31),
    month of the year (1-12),
    day of the week (0-6 with 0=Sunday).
    ตัวอย่างการกำหนดตัวเลข
    เช่น 0 * * * * หมายถึงให้ประมวลผลคำสั่งที่ต่อท้ายนี้ ทุก 0 นาที ก็คือทุกชั่วโมงที่เริ่มต้นชั่วโมง
    หรือ 59 23 * * * หมายถึงให้ประมวลผลคำสั่งที่ต่อท้ายนี้ ทุก วันเวลา 23 นาฬิกา 59 นาที
    หรือ 0, 15, 50 * * * * หมายถึงให้ประมวลผลคำสั่งที่ต่อท้ายนี้ ทุก ชั่วโมงละ 3 ครั้งคือที่ 0 นาที 15 นาที หรือ 50 นาทีของแต่ละชั่วโมง
    ตัวอย่าง crontab ที่ผมใช้อยู่จริง เพื่อเก็บสถิติการเข้าใช้บริการ
    (เราเป็นสถานศึกษาให้บริการศิษย์เก่าแค่ 4 เลขหมาย และภายในสถาบันตามตึกอีก 4 เลขหมายเท่านั้น)
    ซึ่ง 2 บรรทัดข้างล่างนี้เห็นได้จากการใช้คำสั่ง crontab -l
    0 * * * * /usr/local/etc/radius/bin/startup
    59 23 * * * /usr/local/etc/radius/bin/runacct
    

วิธีสร้าง crontab : ท่านเพียงแต่พิมพ์ว่า crontab แล้ว enter ก็สามารถพิมพ์คำสั่ง แล้วป้อนเลขบรรทัดที่ต้องการแก้ จะแสดงบรรทัดเก่า ให้ท่านพิมพ์บรรทัดใหม่ได้ เลยแล้วกดปุ่ม enter เมื่อจะ save ก็ใช้ ctrl-d แต่ถ้าจะยกเลิกให้ใช้ ctrl-c เป็นอันยกเลิก
วิธีลบ crontab : crontab -r username หรือ crontab -r ก็จะลบของ root
วิธีแสดงข้อมูล crontab : crontab -l username หรือ crontab -l

โปรแกรม startup : run ทุกชั่วโมง อัตโนมัติ

โปรแกรมนี้จะทำงานทุกชั่วโมง เพื่อสั่งให้โปรแกรม radiusd จัดทำรายงาน แล้วเก็บเข้าไปในแฟ้ม /tmp/report และบรรทัดต่อมาก็จะสั่งให้ส่งแฟ้มที่ต้องการไปให้กับผู้ดูแลระบบทาง email หลังจากนั้นก็ลงรายงานทิ้งไป เป็นการ backup รายงานวิธีหนึ่ง เพื่อจัดเก็บสถิติต่าง ๆ ไว้ (วิธีนี้ถือเป็นการ backup ข้อมูล อาจไม่ทำก็ได้) และ /usr/local/etc/radius/bin/radiusd เป็นโปรแกรมซึ่งมีขนาดถึง 35592 byte ไม่สามารถใช้คำสั่ง more ดู source โปรแกรมได้ ส่วน /usr/bin/mail ก็เป็นโปรแกรมของ server ที่ใช้สำหรับส่ง mail นั่นเอง เพียงแต่ท่านอาจไม่ชินกับการใช้คำสั่งนี้ส่ง mail แต่ความสามารถของคำสั่ง ก็สามารถใช้ได้ บางคนอาจไม่ต้องใช้ pine ก็สามารถอ่าน mail หรือส่ง mail ได้ด้วยซ้ำไป
    #!/bin/sh
    /usr/local/etc/radius/bin/radiusd > /tmp/report
    /usr/bin/mail webmaster@yonok.ac.th < /tmp/report
    rm /tmp/report
    

โปรแกรม runacct : run วันละ 1 ครั้ง อัตโนมัติ

โปรแกรมนี้ทำหน้าที่เก็บสถิติของแต่ละวันเป็นแฟ้มใหม่ ซึ่งแฟ้มใหม่มีชื่อตามวันเช่น 310100 หรือ 311299 เป็นต้น ท่านสามารถไป copy ข้อมูลจากห้อง http://www.yonok.ac.th/yn/router/ มาทดสอบดูได้นะครับ ซึ่งจะมีข้อมูลทุกวันยกเว้นวันที่ server down หรือไฟฟ้าดับ
หลังจากโปรแกรมทำการเก็บข้อมูลไว้เรียบร้อยแล้ว จะทำการลบแฟ้มข้อมูล แล้วเริ่มต้นนับใหม่ตั้งแต่ต้นของวันใหม่ แฟ้มข้อมูลจึงถูกแยกออกเป็นแต่ละวัน ซึ่งท่านจะสังเกตุได้ว่าแฟ้มข้อมูลที่เราเก็บ ถูกเก็บในแฟ้ม /usr/local/etc/radius/radacct/door.yonok.ac.th/detail ซึ่งข้อมูลในแฟ้มนี้เพิ่มขึ้น เนื่องจากได้ระบบมีโปรแกรม radius แล้วให้บริการตรวจสอบ account ที่มาจาก modem ส่งต่อมายัง rounter แล้ว rounter ขอตรวจสอบ user password มายัง radius server แล้วเครื่องจะสั่งบันทึกการขอใช้ต่าง ๆ ในแฟ้มดังกล่าวนั่นเอง
    #!/bin/sh
    cp /usr/local/etc/radius/radacct/door.yonok.ac.th/detail /export/home/account/data
    ######
    /usr/bin/date +%d > /tmp/date
    /usr/bin/date +%m > /tmp/month
    /usr/bin/date +%y > /tmp/year
    DATE=`cat /tmp/date`
    MONTH=`cat /tmp/month`
    YEAR=`cat /tmp/year`
    TODAY="$DATE$MONTH$YEAR"
    cd /export/home/account/data
    cp detail ../backup
    mv detail $TODAY
    ######
    cd /tmp
    rm date month year
    rm /usr/local/etc/radius/radacct/door.yonok.ac.th/detail
    #end
    

ตัวอย่างผลลัพธ์จาก Radius ที่จะใช้ pascal สรุปผลออกมา

นี่คือตัวอย่างข้อมูลที่ได้รับ ท่านลองเอาโปรแกรม pascal ที่ผมเขียนมาวิเคราะห์ข้อมูล แล้วประมวลผลออกเป็นข้อมูลที่อ่านได้ง่ายดูนะครับ ผมใช้ pascal เพราะตอนนั้นศึกษา pascal และเข้าใจมากกว่าภาษาอื่น เมื่อเจอลักษณะข้อมูลแบบนี้ และคิดว่าถ้าใช้ pascal แล้วน่าจะวิเคราะห์ผลออกมาได้เร็วที่สุด .. ถ้าเป็นท่านจะใช้อะไรครับ และท่านใดอยากได้ปริมาณข้อมูลไปทดลองประมวลผล สามารถเปิดจาก http://www.yonok.ac.th/yn/router/ ยังมีแฟ้มอีกเพียบครับ รอให้ท่านมา copy ไปทดสอบแกะดู
ในการใช้งานจริง แฟ้มข้อมูลจะเป็นของวันเดียว ผมจะใช้คำสั่ง copy ธรรมดา เพื่อรวมแฟ้มทุกแฟ้มเข้าด้วยกัน แล้วจึงจะประมวลผลแฟ้มนั้นครั้งเดียว ก่อนได้ตารางการใช้ของผู้ใช้แต่ละคน
copy 011200 + 021200 + 031200 + 041200 + 051200 file1200 (ตัวอย่างนี้ แสดงการรวมแฟ้มตั้งแต่วันที่ 1 ถึง 5 ของเดือนพฤศจิกายน เข้าแฟ้ม file1200 จึงจะนำแฟ้มนี้ไปประมวลผลต่อไป)
    Tue Feb  1 04:09:07 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 2
            User-Name = "guest006"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B0D"
    
    Tue Feb  1 04:09:12 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 2
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B0F"
            Framed-Protocol = PPP
    
    Tue Feb  1 04:09:13 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 2
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B0F"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.249
    
    Tue Feb  1 04:28:06 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 2
            User-Name = ""
            Acct-Status-Type = Stop
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B0F"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.249
            Acct-Session-Time = 1133
    
    Tue Feb  1 04:28:11 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 2
            User-Name = "guest006"
            Acct-Status-Type = Stop
            User-Service-Type = 7
            Acct-Session-Id = "00000B0D"
            Acct-Session-Time = 1144
    
    Tue Feb  1 05:57:02 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 7
            User-Name = "staff001"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B10"
    
    Tue Feb  1 05:57:07 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 7
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B12"
            Framed-Protocol = PPP
    
    Tue Feb  1 05:57:08 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 7
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B12"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.244
    
    Tue Feb  1 07:22:53 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 4
            User-Name = "guest007"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B13"
    
    Tue Feb  1 07:22:56 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 4
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B15"
            Framed-Protocol = PPP
    
    Tue Feb  1 07:22:57 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 4
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B15"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.247
    
    Tue Feb  1 07:32:49 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 4
            User-Name = ""
            Acct-Status-Type = Stop
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B15"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.247
            Acct-Session-Time = 592
    
    Tue Feb  1 07:32:52 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 4
            User-Name = "guest007"
            Acct-Status-Type = Stop
            User-Service-Type = 7
            Acct-Session-Id = "00000B13"
            Acct-Session-Time = 599
    
    Tue Feb  1 07:32:55 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 8
            User-Name = "guest009"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B16"
    
    Tue Feb  1 07:33:09 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 8
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B18"
            Framed-Protocol = PPP
    
    Tue Feb  1 07:33:09 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 8
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B18"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.243
    
    Tue Feb  1 07:36:17 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 7
            User-Name = ""
            Acct-Status-Type = Stop
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B12"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.244
            Acct-Session-Time = 5950
    
    Tue Feb  1 07:36:22 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 7
            User-Name = "staff001"
            Acct-Status-Type = Stop
            User-Service-Type = 7
            Acct-Session-Id = "00000B10"
            Acct-Session-Time = 5960
    
    Tue Feb  1 07:54:28 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 5
            User-Name = "guest008"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B19"
    
    Tue Feb  1 07:54:32 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 5
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B1B"
            Framed-Protocol = PPP
    
    Tue Feb  1 07:54:32 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 5
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B1B"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.246
    
    Tue Feb  1 08:05:42 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 6
            User-Name = "staff011"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B1C"
    
    Tue Feb  1 08:05:51 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 6
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B1E"
            Framed-Protocol = PPP
    
    Tue Feb  1 08:05:51 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 6
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B1E"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.245
    
    Tue Feb  1 08:22:52 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = "dorm"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B1F"
    
    Tue Feb  1 08:22:56 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B21"
            Framed-Protocol = PPP
    
    Tue Feb  1 08:22:57 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B21"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.248
    
    Tue Feb  1 09:02:16 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 8
            User-Name = ""
            Acct-Status-Type = Stop
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B18"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.243
            Acct-Session-Time = 5347
    
    Tue Feb  1 09:02:19 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 8
            User-Name = "guest009"
            Acct-Status-Type = Stop
            User-Service-Type = 7
            Acct-Session-Id = "00000B16"
            Acct-Session-Time = 5364
    
    Tue Feb  1 09:09:24 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 5
            User-Name = ""
            Acct-Status-Type = Stop
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B1B"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.246
            Acct-Session-Time = 4493
    
    Tue Feb  1 09:09:29 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 5
            User-Name = "guest008"
            Acct-Status-Type = Stop
            User-Service-Type = 7
            Acct-Session-Id = "00000B19"
            Acct-Session-Time = 4501
    
    Tue Feb  1 09:18:51 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 8
            User-Name = "yonok013"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B22"
    
    Tue Feb  1 09:18:58 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 8
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B24"
            Framed-Protocol = PPP
    
    Tue Feb  1 09:18:59 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 8
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B24"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.243
    
    Tue Feb  1 10:15:09 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = ""
            Acct-Status-Type = Stop
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B21"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.248
            Acct-Session-Time = 6735
    
    Tue Feb  1 10:15:12 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = "dorm"
            Acct-Status-Type = Stop
            User-Service-Type = 7
            Acct-Session-Id = "00000B1F"
            Acct-Session-Time = 6742
    
    Tue Feb  1 10:15:36 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = "staff009"
            Acct-Status-Type = Start
            User-Service-Type = 7
            Acct-Session-Id = "00000B25"
    
    Tue Feb  1 10:15:41 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = ""
            Acct-Status-Type = Start
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B27"
            Framed-Protocol = PPP
    
    Tue Feb  1 10:15:41 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = ""
            Acct-Status-Type = 3
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B27"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.248
    
    Tue Feb  1 10:42:04 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = ""
            Acct-Status-Type = Stop
            User-Service-Type = Framed-User
            Acct-Session-Id = "00000B27"
            Framed-Protocol = PPP
            Framed-Address = 203.146.9.248
            Acct-Session-Time = 1583
    
    Tue Feb  1 10:42:07 2000
            Client-Id = 203.146.9.254
            Client-Port-Id = 3
            User-Name = "staff009"
            Acct-Status-Type = Stop
            User-Service-Type = 7
            Acct-Session-Id = "00000B25"
            Acct-Session-Time = 1591
    

โปรแกรม router.pas
โปรแกรมนี้ผมเขียนขึ้นเมื่อมกราคมปี 41 เพื่อใช้งาน .. ซึ่งถ้าเขียนใหม่ จะเขียนได้ดีกว่านี้มาก
ท่านใดเขียนใหม่แล้ว ลดขั้นตอนลงได้ ช่วยส่งมาด้วยนะครับ ผมจะลง source ให้ครับ

หากท่านต้องการทดสอบโปรแกรมนี้ โดยไม่ต้องการนำ .pas ไป compile ให้เป็น exe ท่านสามารถ download .exe ด้วยที่นี่ได้เลยครับ (Click for download router.exe 8Kb เท่านั้น) และถ้าต้องการ compiler ของ Pascal7 ซึ่งใช้กับ Pentium ได้ก็สามารถ Click for download TP7 556Kb
การใช้โปรแกรมนี้ เพียงแต่สั่งว่า c:\>router file1200 ท่านจะได้แฟ้มชื่อ file1200x.txt ซึ่งเป็นผลจากการประมวลผลออกมา อัตโนมัติ ซึ่งออกมาให้ทราบว่าผู้ใช้แต่ละคน ใช้เวลาเท่าไร connect เข้าสู่ระบบผ่านสายโทรศัพท์
ที่อยู่ข้างล่าง source ที่เป็นตัวหนังสือสีน้ำเงินก็คือผลลัพธ์จากโปรแกรม rounter ที่ท่านจะนำไปเปิดใน excel แล้วทำ pivot table เพื่อสรุปผลได้อย่างง่าย ๆ นั่นเอง
    uses crt;
    var
    	F : Text;
        I,err : integer;
        FOUT : Text;
        FOUTNAME : String[12];
        l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11 : string;
        ok : integer;
        kpuser    : string[8];
        kpport  : char;
        kptimeuse : string[7];
        kpdatetime: string[30];
        keepdata  : string;
        timesecond,timeminute,timehour,timeall : real;
    
    procedure openfileout;
    begin
     Assign(F, ParamStr(1));
     {$I-} Reset(F); {$I+}
     if IOResult = 0  then
       begin
      	FOUTNAME := ParamStr(1) + 'x.txt';
      	Assign(FOUT, FOUTNAME);  Rewrite(FOUT);
      	Writeln('File name is : ',Paramstr(1));
       end
     else
       	Writeln('File not found');
    end;
    
    procedure readuntilfound;
    var getline : string;
        getch : char;
    begin
        ok := 0;
        getch := char(0);
        getline := '';
        l1 :=''; l3:=''; l4:=''; l5 := ''; l8:='';
        readln(f, getline); if getline[1] <> char(9) then  l1 := getline;
        readln(f, getline); l2 := getline;
        readln(f, getline); l3 := getline;
        readln(f, getline); l4 := getline;
        readln(f, getline); l5 := getline;
        readln(f, getline); l6 := getline;
        readln(f, getline); l7 := getline;
        readln(f, getline); if length(getline) < 5 then  exit;
        	l8 := getline;
        if (l5[21]+l5[22]+l5[23]+l5[24] = 'Stop') and (l6[22] = '7') then
           begin
              ok := 1;
              kpdatetime := l1;
              kpport := l3[19];
              kpuser := l4[15]+l4[16]+l4[17]+l4[18]+l4[19]+l4[20]+l4[21]+l4[22];
              kptimeuse := '';
              for I := 22 to length(l8) do
                begin
                   if l8[i] in ['0','1','2','3','4','5','6','7','8','9'] then
    	          kptimeuse := kptimeuse + l8[i]
                end;
              val(kptimeuse,timeall,err);
              keepdata := kpuser+' '+kpport+' '+kpdatetime+' '+kptimeuse;
              keepdata := keepdata + char(13) + char(10);
              write(keepdata);
           end;
        readln(f, getline); if length(getline) < 5 then  exit;
        l9 := getline;
        readln(f, getline); if length(getline) < 5 then  exit;
        l10 := getline;
        readln(f, getline); if length(getline) < 5 then  exit;
        l11 := getline;
        writeln(getline);
        readln;
    end;
    
    procedure keepinfile;
    begin
    	write(fout,keepdata);
    end;
    
    begin
     clrscr;
     if length(paramstr(1)) > 0 then
       begin
          openfileout;
          while not eof(f) do
          begin
              readuntilfound;
              if ok = 1 then keepinfile;
          end;
          close(fout);
       end
     else
       Writeln('What is the input-file.')
    end.
    
    routera3 5 Fri Aug 1 01:21:12 1997 3075 routera1 8 Fri Aug 1 01:36:06 1997 13256 routera1 5 Fri Aug 1 02:10:44 1997 1554 routera3 5 Fri Aug 1 08:12:32 1997 964 routera1 8 Fri Aug 1 08:23:53 1997 2408 routera1 5 Fri Aug 1 08:25:39 1997 599 routera1 5 Fri Aug 1 08:48:50 1997 1302 routera1 5 Fri Aug 1 08:49:48 1997 31 routera1 5 Fri Aug 1 08:51:46 1997 80 routera1 8 Fri Aug 1 09:26:15 1997 3037 routera1 5 Fri Aug 1 09:51:03 1997 3200 routera2 3 Fri Aug 1 09:57:49 1997 77 routera2 3 Fri Aug 1 10:00:06 1997 106 routera1 5 Fri Aug 1 10:19:54 1997 1555 routera1 5 Fri Aug 1 10:26:49 1997 190 routera1 5 Fri Aug 1 10:41:48 1997 808 routera1 5 Fri Aug 1 10:51:14 1997 236 routera1 3 Fri Aug 1 10:52:08 1997 104 routera1 3 Fri Aug 1 10:53:36 1997 30 routera1 5 Fri Aug 1 11:13:36 1997 690 routera3 8 Fri Aug 1 11:15:11 1997 6391 routera1 5 Fri Aug 1 11:15:17 1997 30 routera1 5 Fri Aug 1 11:28:22 1997 125

ทำรายงานใน excel

เมื่อได้แฟ้มอย่างเช่น file1200 มาแล้ว ซึ่งมีตัวอย่างดังข้อมูลสีน้ำเงินข้างบนนี้ จะเห็น column สุดท้ายคือหน่วยของเวลาที่ login เข้าระบบเป็นวินาที จำเป็นต้องแปลงให้เป็นชั่วโมงและนาที
หลังจากแปลงแล้ว ให้ใช้ pivot table ของ excel ซึ่งอยู่ใน menu bar : data(ข้อมูล) ทำการจับกลุ่มแยกตามวันที่ และรหัสผู้ใช้ จะได้ตารางรายงานที่ดูดี ใน excel ทันที
สูตรที่ใช้แปลงวินาทีเป็น ชั่วโมงและนาที ใน excel มีดังนี้
1. ผลเป็นชั่วโมง =ROUND((INT((A1/3600))+((A1/3600)-INT(A1/3600))*60/100),2) เช่น 1 ชั่วโมงมี 3600 วินาที ดังนั้น 4000 จึงเท่ากับ 1 ชั่วโมง เมื่อใช้สูตรนี้ทำงานกับค่า 4000 จะได้เลข 1
2. ผลเป็นนาที =MOD(A4,3600)/60 เช่น 3780 คือ 1 ชั่วโมง 3 นาที สูตรนี้จะวิเคราะห์ค่า 3780 ให้ได้เลข 3

ตัวอย่าง Config ของ Cisco 2500 ที่ผมเคยใช้

Username: romeo
Password:
yonok-router>en
Password:
yonok-router#show run
Building configuration...
Current configuration : 2140 bytes
!
version 12.2
service timestamps debug uptime
service timestamps log uptime
service password-encryption
service udp-small-servers
service tcp-small-servers
!
hostname yonok-router
!
aaa new-model
!
aaa session-id common
enable secret 5 $1$FKQT$u.xb5Wxpxk5GN6e2.uwYH/
enable password 7 095F43080B11
!
username wichep password 7 05181F1C354943
username burin password 7 01111450085C535F70
username suwit password 7 045A0F0B062F
ip subnet-zero
!
interface FastEthernet0/0
 ip address 202.29.78.254 255.255.255.0
 speed auto
 full-duplex
 no cdp enable
!
interface Serial0/0
 ip address 202.28.202.74 255.255.255.252
 ip access-group 102 in
 ip access-group 101 out
 no cdp enable
!
router igrp 1
 redistribute connected
 network 202.28.29.0
 network 202.29.78.0
!
ip classless
ip route 0.0.0.0 0.0.0.0 Serial0/0
ip route 0.0.0.0 0.0.0.0 202.28.202.73
no ip http server
ip pim bidir-enable
!
access-list 101 deny   tcp host 202.29.78.9 any eq 5000
access-list 101 deny   tcp host 202.29.78.9 any eq 6900
access-list 101 deny   tcp host 202.29.78.18 any eq 5000
access-list 101 deny   tcp host 202.29.78.18 any eq 6900
access-list 101 permit ip any any
access-list 102 deny   tcp any 202.29.78.0 0.0.0.255 eq 135
access-list 102 deny   udp any 202.29.78.0 0.0.0.255 eq 135
access-list 102 permit ip any any
access-list 102 deny   tcp any 202.29.78.0 0.0.0.255 eq 134
access-list 102 deny   udp any 202.29.78.0 0.0.0.255 eq 134
access-list 103 deny   tcp host 202.29.78.18 any eq ftp
access-list 103 deny   tcp host 202.29.78.18 any gt 2000
access-list 103 permit ip any any
dialer-list 1 protocol ip permit
dialer-list 1 protocol ipx permit
no cdp run
snmp-server community public RO
banner login ^CC
***********************************************************
* YONOK COLLEGE                                           *
* Tel.0-5465-170                                          *
* www.yonok.ac.th, www.isinthai.com                       *
***********************************************************
^C
!
line con 0
line aux 0
line vty 0 4
 password 7 071C385F5A0C14
!
end

yonok-router#
Thaiabc.com