ต่ออีกครั้งนึง น่าจะจบแล้วล่ะ
มีวิธีการเขียน 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
จบแล้วครับ
Showing posts with label shell script. Show all posts
Showing posts with label shell script. Show all posts
Thursday, July 8, 2010
การ เขียน 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 เป็นชิ้นเป็นอันไปจะดีกว่า
เอาไว้ต่อครั้งหน้านะ
เมื่อเราอยู่ในสภาวะแวดล้อมที่เหมาะสมสำหรับการทำ 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 เป็นชิ้นเป็นอันไปจะดีกว่า
เอาไว้ต่อครั้งหน้านะ
Wednesday, July 7, 2010
การเขียน Shell script ใช้งาน nmap เพื่อ scan หา IP #1
วันนี้ได้การบ้านมา ให้หาว่า ในระบบ network ที่เราใช้งานอยู่นั้น มี IP อะไรใช้งานอยู่เป็นประจำบ้าง
ก่อนอื่น เราต้องรู้ว่า จะรู้ได้อย่างไร ว่า มีเครื่องนั้นออนไลน์อยู่ในระบบหรือเปล่า
ซึ่งมีข้อมูลเพิ่มเติมว่า Network นี้ เป็น Server farm ซึ่งคงจะไม่มีใครมานั่งปิด ๆ เปิด ๆ เครื่องบ่อย ๆ อยู่แล้ว
เมื่อมีข้อมูลนี้ เราก็มาดูว่า เราจะติดต่อเครื่องเหล่านี้ได้จากทางไหนบ้าง
1. ping - เราสามารถรู้ได้เลยว่า Server ออนไลน์อยู่หรือเปล่า ถ้า..... Server นั้น ไม่ไดฺ้ Block ping แต่ถ้า Block เราก็หาไม่เจออยู่ดี
2. Traceroute - ให้ผลเหมือนกับข้อ 1
3. portscan - เป็นตัวเลือกที่ดี เนื่องจากว่า คนที่ทำ server จะต้องเปิด port ใดซัก port หนึ่งอย่างแน่นอน มิฉะนั้น เขาจะทำ Server ไปทำไม (จริงมั้ย) ถ้าเรา scan เราก็ต้องเจอแน่นอน ว่า มี IP ไหนบ้าง
จริง ๆ แล้ว การทำ portscan ให้ได้ผลที่สุดคือ
1. หากเราอยู่ที่ network อื่น ๆ ที่คนละวงกับ network ที่เราต้องการ scan เราก็ต้องไปคุยกับ Firewall admin ให้เปิดให้เครื่อง scan ของเรา สามารถเข้าไปที่ network ทีเราต้องการแบบ any port
2. เอาเครื่อง scan ของเรา เข้าไปอยู่ใน network ที่เราต้องการ scan เลย
เอาไว้ต่อคราวหน้าครับ
ก่อนอื่น เราต้องรู้ว่า จะรู้ได้อย่างไร ว่า มีเครื่องนั้นออนไลน์อยู่ในระบบหรือเปล่า
ซึ่งมีข้อมูลเพิ่มเติมว่า Network นี้ เป็น Server farm ซึ่งคงจะไม่มีใครมานั่งปิด ๆ เปิด ๆ เครื่องบ่อย ๆ อยู่แล้ว
เมื่อมีข้อมูลนี้ เราก็มาดูว่า เราจะติดต่อเครื่องเหล่านี้ได้จากทางไหนบ้าง
1. ping - เราสามารถรู้ได้เลยว่า Server ออนไลน์อยู่หรือเปล่า ถ้า..... Server นั้น ไม่ไดฺ้ Block ping แต่ถ้า Block เราก็หาไม่เจออยู่ดี
2. Traceroute - ให้ผลเหมือนกับข้อ 1
3. portscan - เป็นตัวเลือกที่ดี เนื่องจากว่า คนที่ทำ server จะต้องเปิด port ใดซัก port หนึ่งอย่างแน่นอน มิฉะนั้น เขาจะทำ Server ไปทำไม (จริงมั้ย) ถ้าเรา scan เราก็ต้องเจอแน่นอน ว่า มี IP ไหนบ้าง
จริง ๆ แล้ว การทำ portscan ให้ได้ผลที่สุดคือ
1. หากเราอยู่ที่ network อื่น ๆ ที่คนละวงกับ network ที่เราต้องการ scan เราก็ต้องไปคุยกับ Firewall admin ให้เปิดให้เครื่อง scan ของเรา สามารถเข้าไปที่ network ทีเราต้องการแบบ any port
2. เอาเครื่อง scan ของเรา เข้าไปอยู่ใน network ที่เราต้องการ scan เลย
เอาไว้ต่อคราวหน้าครับ
Tuesday, May 25, 2010
การประยุกต์ใช้งาน คำสั่ง mail และ crontab และการเขียน Shell script เบื้องต้น
การประยุกต์ใช้งาน คำสั่ง mail และ crontab และการเขียน Shell script เบื้องต้น
โจทย์มีอยู่ว่า หากเราต้องการให้ระบบ ส่งเมล์บอกเราว่า เรามีเนื้อที่ในดิสก์เหลืออยู่เท่าไหร่ ทุก ๆ วัน เราจะเขียนสั่งงานอย่างไร
สิ่งที่เราจะต้องเริ่มทำเป็นอันดับแรก คือต้องรู้ว่า เราต้องทำอะไรบ้าง นั่นคือ
1. ต้องหาว่า เรามีเนื้อที่เหลือในดิสก์เท่าไหร่ หรือใช้ไปแล้วเท่าไหร่ คำสั่งที่ใช้คือ
df –h
2. แต่เนื่องจากว่า เราต้องการให้เก็บเป็นไฟล์ text เพื่อที่เราจะได้ใช้งานในขั้นตอนถัดไปจากนี้ เราจึงจำเป็นต้องใช้คำสั่งเพิ่มเติมจากปกติเป็นพิเศษ นั่นคือ
df –h > df.txt
3. เราต้องให้ระบบส่งเมล์ออกไปหาเรา คำสั่งที่ใช้ คือ
mail -s "Subject ใส่อะไรก็ได้" "E-mail ที่เราจะให้ส่งไปหา" < df.txt
ยกตัวอย่างเช่น
mail -s "Disk on server" "taveesak@gmail.com" < df.txt
4. เอาคำสั่งข้อสองและข้อสามมารวมกันให้ทำงานได้ในบรรทัดเดียว ก็จะเป็น
df -h > df.txt;mail -s "Disk on server" "taveesak@gmail.com" < df.txt
5. เพื่อความสะดวก ก็ให้เราเขียนเป็น Script ขึ้นมา เวลาใช้งานก็จะเรียกใช้งานได้สะดวกขึ้น โดยมีขั้นตอนดังนี้
a) Login เป็น root ก่อน
b) เพื่อความแน่นอนให้เราพิมพ์ cd เพื่อกลับไปยัง Home ของ root จะได้มั่นใจว่า ไฟล์ script ที่เราเขียนไปอยู่ที่นั่นแน่นอน
c) พิมพ์คำสั่ง vim showdisk.sh หรือจะใช้ชื่ออื่นก็ได้นะ เอาที่จำง่าย ๆ
d) กดปุ่ม i เพื่อให้เราสามารถเขียนคำสั่งลงไปได้ แล้วก็เขียนคำสั่งตามด้านล่างเลย
#!/bin/bash
df -h > df.txt;mail -s "Disk on server" "taveesak@gmail.com" < df.txt
e) จากนั้นกดปุ่ม ESC เพื่อออกจากโหมดแก้ไข และพิมพ์ว่า :wq เพื่อบันทึกและออกจากโปรแกรม
f) ลองสั่ง ls –l จะพบว่ามีไฟล์ showdisk.sh
g) โดยปกติแล้ว script ที่เราเขียนจะยังไม่สามารถ run ได้ จนกว่าเราจะตั้ง mode ให้สามารถ run ซึ่งวิธีการตั้งให้เราพิมพ์คำสั่งดังนี้
Chmod 700 showdisk.sh
h) เพียงเท่านี้ เราก็มี script file ที่สามารถใช้งานได้แล้ว ซึ่งเราสามารถทดสอบการทำงานโดยการเรียก script ขึ้นมาใช้งาน ด้วยการพิมพ์คำสั่งว่า ./showdisk.sh
6. จากโจทย์ บอกว่า เราต้องส่งเมล์บอกทุก ๆ วัน เราก็ต้องตั้งเวลาในการรันscript โดยใช้ crontab ซึ่งมีวิธีการทำดังนี้
a) Login เป็น root ก่อน
b) พิมพ์คำสั่ง vi /etc/crontab
c) กดปุ่ม i เพื่อให้เราสามารถเขียนคำสั่งลงไปได้ แล้วก็เขียนคำสั่งตามด้านล่างเลย
59 23 * * * root /root/showdisk.sh
d) จากบรรทัดด้านบน script นี้ จะถูกรันทุก ๆ วัน เวลา 23:59 น. หรือก่อนเที่ยงคืนซัก 1 นาทีนั่นเอง
e) จากนั้นกดปุ่ม ESC เพื่อออกจากโหมดแก้ไข และพิมพ์ว่า :wq เพื่อบันทึกและออกจากโปรแกรม
7. เท่านี้ก็เสร็จเรียบร้อย ที่เหลือก็แค่รอเมล์ที่จะเข้ามาตามเวลาที่เราระบุไว้ใน crontab
โจทย์มีอยู่ว่า หากเราต้องการให้ระบบ ส่งเมล์บอกเราว่า เรามีเนื้อที่ในดิสก์เหลืออยู่เท่าไหร่ ทุก ๆ วัน เราจะเขียนสั่งงานอย่างไร
สิ่งที่เราจะต้องเริ่มทำเป็นอันดับแรก คือต้องรู้ว่า เราต้องทำอะไรบ้าง นั่นคือ
1. ต้องหาว่า เรามีเนื้อที่เหลือในดิสก์เท่าไหร่ หรือใช้ไปแล้วเท่าไหร่ คำสั่งที่ใช้คือ
df –h
2. แต่เนื่องจากว่า เราต้องการให้เก็บเป็นไฟล์ text เพื่อที่เราจะได้ใช้งานในขั้นตอนถัดไปจากนี้ เราจึงจำเป็นต้องใช้คำสั่งเพิ่มเติมจากปกติเป็นพิเศษ นั่นคือ
df –h > df.txt
3. เราต้องให้ระบบส่งเมล์ออกไปหาเรา คำสั่งที่ใช้ คือ
mail -s "Subject ใส่อะไรก็ได้" "E-mail ที่เราจะให้ส่งไปหา" < df.txt
ยกตัวอย่างเช่น
mail -s "Disk on server" "taveesak@gmail.com" < df.txt
4. เอาคำสั่งข้อสองและข้อสามมารวมกันให้ทำงานได้ในบรรทัดเดียว ก็จะเป็น
df -h > df.txt;mail -s "Disk on server" "taveesak@gmail.com" < df.txt
5. เพื่อความสะดวก ก็ให้เราเขียนเป็น Script ขึ้นมา เวลาใช้งานก็จะเรียกใช้งานได้สะดวกขึ้น โดยมีขั้นตอนดังนี้
a) Login เป็น root ก่อน
b) เพื่อความแน่นอนให้เราพิมพ์ cd เพื่อกลับไปยัง Home ของ root จะได้มั่นใจว่า ไฟล์ script ที่เราเขียนไปอยู่ที่นั่นแน่นอน
c) พิมพ์คำสั่ง vim showdisk.sh หรือจะใช้ชื่ออื่นก็ได้นะ เอาที่จำง่าย ๆ
d) กดปุ่ม i เพื่อให้เราสามารถเขียนคำสั่งลงไปได้ แล้วก็เขียนคำสั่งตามด้านล่างเลย
#!/bin/bash
df -h > df.txt;mail -s "Disk on server" "taveesak@gmail.com" < df.txt
e) จากนั้นกดปุ่ม ESC เพื่อออกจากโหมดแก้ไข และพิมพ์ว่า :wq เพื่อบันทึกและออกจากโปรแกรม
f) ลองสั่ง ls –l จะพบว่ามีไฟล์ showdisk.sh
g) โดยปกติแล้ว script ที่เราเขียนจะยังไม่สามารถ run ได้ จนกว่าเราจะตั้ง mode ให้สามารถ run ซึ่งวิธีการตั้งให้เราพิมพ์คำสั่งดังนี้
Chmod 700 showdisk.sh
h) เพียงเท่านี้ เราก็มี script file ที่สามารถใช้งานได้แล้ว ซึ่งเราสามารถทดสอบการทำงานโดยการเรียก script ขึ้นมาใช้งาน ด้วยการพิมพ์คำสั่งว่า ./showdisk.sh
6. จากโจทย์ บอกว่า เราต้องส่งเมล์บอกทุก ๆ วัน เราก็ต้องตั้งเวลาในการรันscript โดยใช้ crontab ซึ่งมีวิธีการทำดังนี้
a) Login เป็น root ก่อน
b) พิมพ์คำสั่ง vi /etc/crontab
c) กดปุ่ม i เพื่อให้เราสามารถเขียนคำสั่งลงไปได้ แล้วก็เขียนคำสั่งตามด้านล่างเลย
59 23 * * * root /root/showdisk.sh
d) จากบรรทัดด้านบน script นี้ จะถูกรันทุก ๆ วัน เวลา 23:59 น. หรือก่อนเที่ยงคืนซัก 1 นาทีนั่นเอง
e) จากนั้นกดปุ่ม ESC เพื่อออกจากโหมดแก้ไข และพิมพ์ว่า :wq เพื่อบันทึกและออกจากโปรแกรม
7. เท่านี้ก็เสร็จเรียบร้อย ที่เหลือก็แค่รอเมล์ที่จะเข้ามาตามเวลาที่เราระบุไว้ใน crontab
Subscribe to:
Posts (Atom)