วิเคราะห์ Radius ด้วย Pascal | ||
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 คนใด
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),
เช่น 0 * * * * หมายถึงให้ประมวลผลคำสั่งที่ต่อท้ายนี้ ทุก 0 นาที ก็คือทุกชั่วโมงที่เริ่มต้นชั่วโมง หรือ 59 23 * * * หมายถึงให้ประมวลผลคำสั่งที่ต่อท้ายนี้ ทุก วันเวลา 23 นาฬิกา 59 นาที หรือ 0, 15, 50 * * * * หมายถึงให้ประมวลผลคำสั่งที่ต่อท้ายนี้ ทุก ชั่วโมงละ 3 ครั้งคือที่ 0 นาที 15 นาที หรือ 50 นาทีของแต่ละชั่วโมง
(เราเป็นสถานศึกษาให้บริการศิษย์เก่าแค่ 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# |