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



จบแล้วครับ

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

ต่อจากครั้งที่แล้ว

เมื่อเราอยู่ในสภาวะแวดล้อมที่เหมาะสมสำหรับการทำ Port scan แล้ว สิ่งต่อไปก็คือ เราต้องหาเครื่องมือที่มาทำการ Scan
ปัจจุบัน มีเครื่องมือที่ทำหน้าที่นี้อยู่มากมายให้เราได้เลือกใช้กันอย่างจุใจ บางอย่างก็ฟรี บางอย่างก็ต้องมี License และเนื่องจากเราอยู่บนพื้นฐานของ การทำอย่างไรก็ได้ให้เสียเงินน้อยที่สุด หรือพูดง่าย ๆ คือ ของฟรีและถูกกฏหมายนั่นแหละ และเพิ่มอีกอย่างนึง เอาแบบง่าย ๆ ด้วย ดังนั้น มี Tools อยู่ตัวนึงที่น่าจะเอาเข้ามาใช้งาน นั่นคือ

Nmap

วิธีการลง nmap ก็ง่ายแสนง่าย แค่ไป Download nmap version ล่าสุดที่ http://nmap.org/
แล้วมาติดตั้งในเครื่องก็ใช้งานได้แล้ว

วิธีการติดตั้ง nmap

หลังจากที่เรา Download nmap มาจาก Official website มาลงที่เครื่องเราแล้ว ก็ทำการส่งต่อไฟล์นี้เข้าไปที่เครื่อง Scan Server ของเรา เพื่อทำการติดตั้ง ซึ่งอาจจะทำผ่าน โปรแกรม winscp ก็ได้

เมื่อนำไฟล์ไปวางไว้ใน Scan server แล้ว ให้ทำตามขั้นตอนดังนี้เลย


1. แตกไฟล์ออกมาโดยใช้คำสั่ง tar ตามด้านล่าง

tar xvf nmap-5.21.tar.bz2

2. เข้าไปใน Folder ที่เราแตกไฟล์มาแล้ว

cd nmap-5.21

3. พิมพ์คำสั่งด้านล่างตามลำดับ

./configure

make

make install

เพียงเท่านี้ ก็จะติดตั้ง nmap อย่างสมบูรณ์


หลังจากติดตั้งเรียบร้อยก็ถึงเวลาใช้งาน เพียงเราพิมพ์คำสั่ง

nmap –v network address/24

ก็สามารถ scan port เพื่อหา Alive host ได้แล้ว

ทีนี้ จะทำทั้งที ก็ขอให้มัน Auto นึดนึง สมมติว่า เรามี Network หลาย ๆ network คงต้องมาพิมพ์กันเมื่อยแน่ ๆ ยิ่งจะเอารายงานทุก ๆ วันอีก รับรอง แค่มานั่นพิมพ์เองก็ไม่ทันแล้วล่ะ

อย่ากระนั้นเลย เรามาเขียนให้มันเป็น script เป็นชิ้นเป็นอันไปจะดีกว่า



เอาไว้ต่อครั้งหน้านะ