Thursday, July 8, 2010

การ เขียน Shell script ใช้งาน nmap เพื่อ scan หา IP #3

ต่ออีกครั้งนึง น่าจะจบแล้วล่ะ

มีวิธีการเขียน Script มากมาย ที่จะให้ได้ผลลัพท์แบบ Auto โดยที่ หลาย ๆ วิธีอาจจะดีกว่าวิธีนี้แบบหน้ามือเป็นหลังมือ
แต่ผมถนัดแบบนี้นี่นา เขียนก็ไม่เก่ง แต่พอใช้ได้ครับ

Script ที่ใช้จะเป็น Shell Script ธรรมดาครับ โดยมีหน้าตาดังนี้

1. อันดับแรก ประกาศให้โลกรู้ว่า Script ที่เราเขียนน่ะ เป็น BASH script (Born Again Shell script) นะ อย่าเข้าใจเป็นอย่างอื่น

#!/bin/bash


2. กำหนดตัวแปรตัวแรกก่อนเลย ชื่อ network24 แล้วก็ใส่ค่าให้ตัวแปรด้วย ก็เอา network IP ที่เราจะ scan ใส่ลงไปนั่นแหละ


network24="
192.168.0.0
192.168.1.0
"


3. กำหนดค่า Directory ต่าง ๆ ว่า เราจะเก็บไฟล์ที่สร้างเสร็จแล้ว ไว้ที่ไหน โดยให้สร้างตามวันที่ แล้วให้สร้าง Directory เปล่า ๆ ขึ้นมารอเอาไว้เลย


TODAY=`date +%d-%b-%y`
BASEDIR="/rogueIP/"`date +%d-%b-%y`
REPORT=${BASEDIR}"/report.log"
mkdir -p ${BASEDIR}


4. เริ่มกันเลยดีกว่า
4.1 สั่งวนลูป ให้อ่านค่าของตัวแปร network24 ทีละบรรทัด แล้วเอาไปเก็บไว้ที่ตัวแปรชื่อ ip
4.2 พิมพ์ชื่อของ network ให้เป็น header ลงบนไฟล์ report.log
4.3 ใช้คำสั่ง nmap เพื่อทำ Port scan เสร็จแล้ว ให้เก็บผลลัพท์ที่ออกมาไว้ในไฟล์ temp_ชื่อตัวแปร ip
4.4 เนื่องจากในผลลัพท์ที่ออกมานั้น มีรายละเอียดมากมาย แต่เราต้องการเพียง IP ที่มีการใช้งานเท่านั้น ดังนั้น เราจึงต้องทำการกรองเอาเฉพาะ ส่วนที่เราต้องการคือ Host ที่ Up อยู่เท่านั้น ที่เหลือให้ตัดออกไป จากนั้น เอาผลที่ได้ไปใส่ใว้ใน report.log
4.5 กรองเอาผลลัพท์ที่สรุป ว่า มี Host ที่ Up อยู่เท่าไหร่ ใส่ใว้ใน report.log เป็น Footer
4.6 เอาผลที่ได้จากข้อ 4.3 ไปเก็บไว้ใน Directory ที่เราเตรียมไว้ ส่วน File Temp ต่าง ๆ ลบทิ้งไป
4.7 วนลูปไปเรื่อย ๆ จนครบทุกๆ network ที่เราต้องการ


for network in ${network24}
do
ip=`echo ${network} | cut -f 1`
echo "-----------------------------------------------------------------" >> ${REPORT}
echo "Network " ${ip} "/24" >> ${REPORT}
nmap -v ${ip}/24 > ${ip}
cat ${ip} | grep "Nmap scan report for" > temp_${ip}
cat temp_${ip} | grep -v "host down" >> ${REPORT}
cat ${ip} | grep "Nmap done" >> ${REPORT}
echo "-----------------------------------------------------------------" >> ${REPORT}
rm -f temp*
mv ${ip} ${BASEDIR}
done


5. เมื่อทำเสร็จแล้ว ก็ให้เราส่งเมล์ผลที่ได้ ไปยังเมล์ที่เราต้องการ แต่ก่อนที่เราจะส่งเมล์ได้ ก็ต้องมี mail server ในเครื่องเราก่อน นะ
จริง ๆ แล้ว ถ้าเราไม่คิดว่าจะส่งเมล์ ก็ตัดขั้นตอนนี้ทิ้งไปได้เลย แต่ส่งเมล์จะดีกว่า คือ ไม่ต้องเข้ามาดูที่ server ทุก ๆ วัน อ่านเอาจากเมล์ก็ได้แล้ว


SUBJECT="IP usage report"
EMAIL="taveesak@gmail.com"
EMAILMESSAGE=${REPORT}
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE



จบแล้วครับ