2554-09-05

HW ภาษาซี

การบ้าน หน้า 20

#include<stdio.h>
#include<conio.h>


float trapezoidarea(void)
{
     float side1,side2,high,area;
     printf("Enter side1 : ");
     scanf("%f",&side1);
     printf("Enter side2 : ");
     scanf("%f",&side2);
     printf("Enter high : ");
     scanf("%f",&high);
                       area = ((side1+side2)*high)/2;
     return(area);
}
main()
{
      float area;
      area = trapezoidarea();
      printf("Trapezoid Area is %.2f\n",area);
      getch();
}







การบ้าน หน้า23

#include<stdio.h>
#include<conio.h>
#include<math.h>
float power(float n);
float sqroot(float n);
main()
{
      float n;
      int c;
     
      printf("Enter number : ");
      scanf("%f",&n);
      printf("Please select choice( 1=power, 2=square root) : ");
      scanf("%d",&c);
     
      if(c==1)
      {
             power(n);
            
      }
      else if(c==2)
      {
             sqroot(n);
            
      }      
      else
      {
             printf("Menu Error!!");
      }
     
     
     
    
      getch();
     
}
float power(float n)
{
       float mypow;
       mypow=pow(n,2);
       printf("Result = %.2f ",mypow);
       return(mypow);
}
float sqroot(float n)
{
       float mysqrt;
       mysqrt=sqrt(n);
       printf("Result = %.2f ",mysqrt);
       return(mysqrt);
}







การบ้าน หน้า 27

#include<stdio.h>
#include<conio.h>


char cal_grade(float score);
main()
{
      float score;
      char grade; 
      printf("Enter score : ");
      scanf("%f",&score);
                         grade = cal_grade(score);
      printf("You get %c !!!",grade);
      getch();
}
char cal_grade(float score)
{
      char grade;
      if (score>=80)
      {
                 grade = 'A';
      }
      else if (score>=70&&score<80)
      {
                 grade = 'B';
      }
      else if (score>=60&&score<70)
      {
                 grade = 'C';
      }
      else if (score>=50&&score<60)
      {
                 grade = 'D';
      }
      else if (score<50)
      {
                 grade = 'F';
      }
      return(grade);
}



การบ้าน หน้า28
#include<stdio.h>
#include<conio.h>
float myavg(void)
{
     float a,b,avg;
     printf("Enter a : ");
     scanf("%f",&a);
     printf("Enter b : ");
     scanf("%f",&b);
     avg = (a+b)/2;
     return(avg);
}
main()
{
      float avg;
      avg = myavg();
      printf("Average is %.2f\n",avg);
      getch();
}
การบ้าน ข้อที่1
#include<stdio.h>
#include<conio.h>
int findmax(int n1,int n2);
main()
{
      int n1,n2,ans;
      printf("Enter number1 : ");
      scanf("%d",&n1);
      printf("Enter number2 : ");
      scanf("%d",&n2);
     
      ans = findmax(n1,n2);
      printf("The max number is %d",ans);
      getch();
}
int findmax(int num1,int num2)
{
      int max;
          if (num1 > num2)
          {
                 max = num1;
          }
          else if (num2 > num1)
          {
                 max = num2;
          }
      return(max);
}

2554-08-09

PROGRAM " WIRESHARK "




Wireshark ชื่อเดิม Ethereal เป็นโปรแกรมจำพวก packet sniffer ชนิดหนึ่งซึ่งประกอบไปด้วยส่วนของ Packet Capture และ Packet Analyzer โดยทำหน้าที่ในการวิเคราะห์ระบบ Network โดย Wireshark นั้นสามารถทำงานได้ทั้งบนระบบปฏิบัติการ Linux, window และ OSX สามารถทำการวิเคราะห์ข้อมูลบนเครือข่ายได้หลากหลายรูปแบบ และที่สำคัญ Wireshark นั้นเป็นซอฟต์แวร์แบบ Open Source หรือ Freeware ซึ่งให้ใช้งานโดยไม่ต้องเสียค่าใช้จ่ายและมีต้นฉบับสำหรับให้นำไปพัฒนาต่อยอดได้อีกด้วย ปัจจุบัน Wireshark ได้พัฒนามาถึงเวอร์ชัน 1.1.0 Development release


Table 3.1.  Keyboard Navigation
Accelerator
Description
Down
ไปยัง packets หรือ item ถัดไป
Up
ไปยัง packets หรือ item ก่อนหน้านี้
Ctrl+Down, F8
ไปยัง packets ถัดไป แม้ว่า รายการของ packet นั้นจะไม่ได้ โฟกัสเอาไว้
Ctrl+Up, F7
ไปยัง packets ก่อนหน้านี้ แม้ว่า รายการของ packet นั้นจะไม่ได้ โฟกัสเอาไว้
Ctrl+.
ไปยัง packets of the conversation ถัดไป (TCP, UDP or IP)
Ctrl+,
ไปยัง packets of the conversation ก่อนหน้านี้ (TCP, UDP or IP)
Left
ใน packet detail ให้ปิดทุก items ที่เลือกไว้ หาก item นั้นได้บันทึกไว้แล้ว
Right
ใน packet detail ให้เปิดทุก items ที่เลือกไว้
Shift+Right
ใน packet detail ให้เปิดทุก itemsและส่วนประกอบย่อยๆที่เลือกไว้
Ctrl+Right
ใน packet detail ให้เปิดทุก items.
Ctrl+Left
ใน packet detail ให้ปิดทุก items.


เมนูการใช้งาน


 File: เมนูนี้ ใช้สำหรับ open (เปิด) ,merge capture files (รวมแฟ้มเอกสาร), save(บันทึก) / print(พิมพ์) / export capture files (ส่งไฟล์ไปยังโปรแกรมอื่นๆ)  และ quit from Wireshark. (ปิดโปรแกรมนี้)


Table 3.2. File menu items ฉบับคร่าวๆ
Menu Item
Accelerator
Description
Open...
Ctrl+O
เมนูนี้ใช้สำหรับเปิดกล่อง  dialog เพื่อดาวโหลด   capture file
Close
Ctrl+W
เมนูนี้ใช้สำหรับปิด Capture. ถ้าคุณไม่ได้บันทึก capture ตัวโปรแกรมจะถามคุณก่อนการปิดโปรแกรม
Save
Ctrl+S
เมนูนี้ใช้สำหรับบันทึก Capture.  คุณไม่สามารถบันทึก capture ในขณะที่โปรแกรมกำลังทำงานอยู่  ควรกด stop ก่อนการ save capture
Save As...
Shift+Ctrl+S
เมนูนี้ใช้สำหรับบันทึก capture file เป็นไฟล์อะไรก็ตามที่คุณต้องการบันทึก
Export > File...

เมนูนี้ใช้สำหรับส่ง packets ทั้งหมดใน the capture file ไปยัง file
Print...
Ctrl+P
เมนูนี้ใช้สำหรับพิมพ์ packets ใน capture file
Quit
Ctrl+Q
เมนู นี้ใช้สำหรับสั่งปิดโปรแกรมนี้ ซึ่งก่อนการปิดโปรแกรม หากคุณไม่ได้ทำการบันทึกไว้ก่อนหน้านี้  ตัวโปรแกรมจะถามคุณก่อนการปิดโปรแกรมว่า คุณต้องการบันทึก capture นี้ ใช่หรือไม่


Edit: เมนูนี้ใช้สำหรับ ค้นหา packet, ตั้งค่าตามความพึงพอใจ (ตัด, คัดลอก, และวาง)


Table 3.3. Edit menu items
Menu Item
Accelerator
Description
Copy > Description
Shift+Ctrl+D
This menu item will copy the description of the selected item in the detail view to the clipboard.
Copy > Fieldname
Shift+Ctrl+F
ใช้สำหรับคัดลอก fieldname ของ item ที่ถูกเลือกในclipboard
Copy > Value
Shift+Ctrl+V
ใช้คัดลอกจำนวนของ item ที่ถูกเลือกใน clipboard
Find Packet...
Ctrl+F
ใช้สำหรับค้นหา packet จากหลายหลักเกณฑ์
Find Next
Ctrl+N
ใช้สำหรับค้นหา Packet ถัดไปที่เข้ากันได้กับการตั้งค่าจาก "Find Packet...".
Find Previous
Ctrl+B
ใช้สำหรับค้นหา Packet ก่อนหน้านี้ที่เข้ากันได้กับการตั้งค่าจาก "Find Packet...".
Mark Packet (toggle)
Ctrl+M
ใช้สำหรับทำเครื่องหมาย displayed packets ที่ถูกเลือกเอาไว้
Mark All Displayed Packets
Shift+Ctrl+M
ใช้สำหรับทำเครื่องหมาย displayed packets ทั้งหมด
Preferences...
Shift+Ctrl+P
ใช้สำหรับกำหนดหรือตั้งค่าตัวแปรที่ใช้ควบคุม Wireshark. คุณสามารถบันทึกpacketหรือcapture ที่คุณต้องการเพื่อใช้ในเวลาต่อๆไป


View : ใช้สำหรับควบคุมการแสดง captured data ซึ่งประกอบด้วย colorization of packets, การซุมของ font, การแสดง packet ในหน้าต่างที่แยกกันออกไป และอื่นๆอีกมากมาย


Table 3.4. View menu items
Zoom In
Ctrl++
ขยายขนาดของ Packet data (เพิ่มขนาดของตัวอักษร).
Zoom Out
Ctrl+-
ลดขนาดของ Packet data (ลดขนาดของตัวอักษร).
Normal Size
Ctrl+=
ทำให้ขนาดกลับสู่ปกติ คือ 100%
Resize All Columns
Shift+Ctrl+R
ให้สำหรับเปลี่ยนขนาดความกว้างของ column ทั้งหมด เพิ่มความเหมาะสมของงาน
Expand Subtrees
Shift+Right
ใช้สำหรับขยาย subtree ที่ถูกเลือกใน packet  
Expand All
Ctrl+Right
Wireshark ใช้สำหรับบอกรายการของ protocol subtrees ทั้งหมด ที่สามารถแผ่ขยายต่อไปได้อีก และใช้สำหรับขยาย subtrees ทั้งหมดในทุก packets ของ capture.
Collapse All
Ctrl+Left
เมนูนี้ใช้สำหรับลบ packet ทั้งหมดที่มีในรายการ capture
Reload
Ctrl+R
เมนูนี้อนุญาตให้คุณเพิ่ม Capture file.


Go: เมนูนี้ใช้สำหรับออกคำสั่งในการหา packet พิเศษหรือ packet จำเพาะเจาะจง


Table 3.5. Go menu items
Menu Item
Accelerator
Description
Back
Alt+Left
ข้ามไปยัง packet ก่อนหน้านี้ที่เคยเข้า โดยเข้าไปยัง packet history ซึ่งคล้ายกับ history ใน web browser
Forward
Alt+Right
ข้ามไปยัง packet ต่อไปที่เข้าเยี่ยม โดยเข้าไปยัง packet history, ซึ่งคล้ายกับ history ใน web browser
Previous Packet
Ctrl+Up
ไปยัง packet ก่อนหน้านี้ในรายการ
Next Packet
Ctrl+Down
ไปยัง packet ถัดไปในรายการ
First Packet
Ctrl+Home
ไปยัง packet แรกสุดใน capture file
Last Packet
Ctrl+End
ไปยัง packet สุดท้ายใน capture file

Capture: เมนูนี้ใช้สำหรับ เริ่มต้น ,แก้ไข และสั่งหยุด captures


Table 3.6. Capture menu items
Menu Item
Accelerator
Description
Interfaces...
Ctrl+I
เมนูนี้ใช้สำหรับแสดงว่าตอนนี้ network กำลังทำอะไรอยู่ ซึ่ง Wiresharkสามารถเข้าถึงและตรวจสอบ
Options...
Ctrl+K
เป็นเมนูที่นำไปสู่ กล่อง Capture Options dialog และอนุญาตให้คุณเริ่มต้นสร้าง capturing packets.
Start
Ctrl+E
เริ่มต้นเข้าใช้captureอย่างรวดเร็วกว่าครั้งแรกๆที่เริ่มใช้
Stop
Ctrl+E
เมนูนี้ใช้สำหรับสั่งหยุด capture ที่กำลังทำงานอยู่
Restart
Ctrl+R
เมนูใช้สำหรับเริ่มต้น capture ที่เพิ่งสั่งหยุด ให้เข้าสู่สภาพเดิมโดยใช้เวลาเพียงไม่นาน
Capture Filters...

เป็นเมนูที่นำไปสู่กล่อง dialog ที่อนุญาตให้คุณสร้าง หรือแก้ไข capture filters ซึ่งคุณสามารถตั้งชื่อ filters และบันทึกไว้ล่วงหน้า


Analyze: เมนูนี้ประกอบด้วย item ที่ใช้ปรับ display filters, ติดตาม a TCP stream และ วิเคราะห์ความเป็นไปได้ของ protocols

Statistics: เมนูนี้ประกอบด้วยใจความสรุปของ packet ที่เคย capture ไปแล้ว, display protocol hierarchy statistics (สถิติของแสดงการจัดระบบตามลำดับขั้นระเบียบการ) และอื่นๆอีกมากมาย

 
Telephony: เมนูนี้ประกอบด้วย telephonyที่แตกต่างกัน ซึ่งเกี่ยวกับจำนวนสถิติของการใช้โปรแกรมซึ่งประกอบด้วย media analysis (การวิเคราะห์ของ media) , flow diagrams (แผนภาพ flow) ,  display protocol hierarchy statistics (วิชาสถิติแสดงการจัดระบบตามลำดับขั้นระเบียบการ) และอื่นๆอีกมากมาย

Tools: เมนูนี้ประกอบด้วยเครื่องมือหลากหลายชนิดใน wireshark อย่างเช่น creating Firewall ACL Rules

Internals: เมนูนี้ใช้สำหรับ บอกหรือโชว์ข่าวสารเกี่ยวกับ wireshark

 
Help: เมนูนี้ใช้สำหรับช่วยเหลือ ผู้ใช้โปรแกรม ตัวอย่างเช่น ช่วยสอนวิธีการใช้โปรแกรมแบบพื้นฐาน, ออนไลน์สิทธิ์หรือโอกาสในการเข้าถึงบางส่วนของ webpage และ มีคู่มือการใช้งานของโปรแกรมนี้


The "Main" toolbar




วิธีการใช้งาน Wireshark
บทความนี้จะมาแนะนำการใช้งานโปรแกรม Wireshark เบื้องต้น สำหรับผู้ที่กำลังเขียนโปรแกรมติดต่อ ระหว่างไมโครคอนโทรลเลอร์ กับเครือข่ายอยู่ (หรือจะเอาไป hack ก็ได้นะ แต่ไม่แนะนำให้ทำนะ)
ก่อนอื่นต้องดาวน์โหลด ตัวโปรแกรมมาติดตั้งบนคอมพิวเตอร์ โดยดาวโหลดจากเว็บไซต์ของ Wireshark : www.wireshark.org หลังจากที่ดาวน์โหลดโปรแกรมมาติดตั้งเรียบร้อยแล้ว ก็ให้เปิดโปรแกรม wireshark ขึ้นมา จะปรากฏหน้าต่างว่าง ดังรูปด้านล่าง
รูปหน้าต่างหลักของโปรแกรม Wireshark

    หลังจากที่เปิดโปรแกรม Wireshark ขึ้นมาแล้ว ต่อไปก็จะเริ่มดักจับ Packet บนการ์ดแลนของเราครับ ให้คลิกที่เมนู Capture แล้วก็เลือก Option หรือจะกดคีย์ลัด Ctrl+K เพื่อตั้งค่าการดักจับข้อมูล ดังรูป
เลือกเมนู Capture->Option

    จะปรากฏหน้าต่าง Capture Option ขึ้นมา ตรงช่อง Interface ให้เลือกการ์ดแลนบนคอมของเรา ที่เชื่อมต่อกับเครือข่ายอยู่ ตรงช่อง Capture Filers ยังไม่ต้องใส่ filter อะไรลงไป  


 ตั้งค่าก่อนดักจับข้อมูลโดย กดเอาเครื่องหมายออกในช่องของ Display Option ตามรูปด้านล่าง       และคลิก Start  


หลังจากที่กด Start แล้ว จะปรากฏหน้าต่างแสดงสถานะ การดักจับข้อมูลขึ้นมาดังรูป 

สถานะของการดักจับข้อมูล

   ต่อไปให้เปิด command line ขึ้นมา โดยคลิกที่ Start->Run แล้วพิมพ์คำว่า cmd แล้วกด Enter จะปรากฎหน้าต่าง command line ขึ้นมา ให้พิมพ์ ping [ip address] -n 1 แล้วกด Enter กลับไปที่หน้าต่างสถานะของการดักจับ ก็จะแสดงออกมาว่าตอนนี้ดักจับข้อมูลได้กี่ packet แบ่งเป็น protocol อะไรบ้าง ดังรูป       
                                                         
            สถานะของการดักจับข้อมูล
     หลังจากที่ดักจับข้อมูลที่เราทดสอบเรียบร้อยแล้ว ก็ให้กด Stop เพื่อหยุดการดักจับข้อมูล หลังจากนั้นโปรแกรมจะแสดงรายละเอียดของข้อมูลที่ดักจับได้ดังรูป โดยจะแบ่งรายระเอียดเป็นสามช่อง ช่องแรกเป็นข้อมูลคร่าวๆ ของแต่ละ packet ช่องที่สองเป็นรายละเอียดของแต่ packet ที่ดักจับได้ ส่วนช่องที่สามเป็นข้อมูลดิบฐานสิบหก ที่โปรแกรมจับได้



Three-way Handshake

: เป็นวิธีการส่งแพ็กเก็ตที่สามารถช่วยแก้ปัญหาในเรื่องแพ็กเก็ตซ้ำซ้อนได้ดี แต่วิธีนี้จำเป็นจะต้องสร้างช่องสื่อสารให้ได้ก่อนที่จะเริ่มรับ-ส่งข้อมูล อย่างไรก็ตาม แพ็กเก็ตควบคุมที่ใช้ในการต่อรองค่าตัวแปรสำหรับการสื่อสารต่างๆ อาจเกิดการตกค้างอยู่ในระบบได้ ทำให้การกำหนดค่าหมายเลขลำดับมีปัญหาไปด้วย

  ตัวอย่างของ Three-way-handshake บรรทัดที่  21-23 ของ Protocol TCP

 เป็นการแสดงการทำ Three-way-handshake โดยมีของ Protocol TCP มี segment ที่เกี่ยวข้องดังนี้ 
        1. SYN
        2. SYN, ACK
        3. ACK
   โดยที่มีเครื่องลูก (Client) คือหมายเลข IP 192.168.1.4 ที่ Port 53887 ติดต่อไปยังเครื่องแม่ (Server) ที่หมายเลข IP 192.168.1.1 ที่ Port 80 มีการทำงานดังนี้
 
   1. TCP ของเครื่องผู้ใช้ส่งเซกเมนต์ที่บรรจุเลขลำดับนี้ไปยังเครื่องของ server พร้อมทั้งแฟล็ก SYN ให้เป็น "1"(เซกเมนต์ 1)
   2. TCP ของเครื่อง server ได้รับเซกเมนต์จากเครื่องผู้ใช้แล้วตอบกลับด้วยเซกเมนต์ SYN (เซกเมนต์ 2)พร้อมทั้งเซ็ตแฟล็ก ACK เพื่อแจ้งว่าเซกเมนต์ 1 โดยใช้เลขลำดับที่ได้รับจากทางเครื่องของผู้ใช้บวกด้วย 1
   3. TCP ของเครื่องผู้ใช้ จะส่งเซกเมนต์ตอบกลับไป (เซกเมนต์ 3) โดยเซ็ตแฟล็ก ACK และใช้เลขลำดับที่ได้รับจากเครื่อง server บวกด้วยหนึ่ง
 
 แสดงได้ตามตารางดังนี้
ลำดับ 
Segment 
Source 
Destination 
Seq No. 
Ack No. 
การคำนวณ Ack 
IP Address 
Port 
IP Address 
Port 
1
SYN 
192.168.1.4 (Client) 
53887
192.168.1.1 (Server) 
80
0
0

2
SYN,ACK 
192.168.1.1 (Server) 
80
192.168.1.4 (Client) 
53887
0
1
Seq.No SYN = 0+1 
3
ACK 
192.168.1.4 (Client) 
53887
192.168.1.1 (Server) 
80
1
1
Seq.No SYN = 0+1 




Wireshark  มีประโยชน์อะไร
        ตามปกติถ้าเราใช้คอมพิวเตอร์เปิดเว็บไซต์ทั่วไปหรือติดต่อกับเครื่องอื่นๆ นั้นจะไม่แสดง protocols (สิ่งที่ใช้การสื่อสารระหว่างคอมพิวเตอร์)แต่ถ้าเราต้องการจะเห็น protocols เพื่อศึกษาการทำระบบ หรือ Hack (ไม่แนะนำ) เราจำเป็นใช้โปรแกรมดักจับ protocols หนึ่งในนั้นก็คือ โปรแกรม wireshark โดยการทำงานของ wireshark นั้นจะทำการจับ ข้อความที่ส่งกันระหว่าง protocols ซึ่งเราจะเรียกว่า Packet sniffer






อ้างอิงจาก 
: Wireshark User's Guide (คู่มือการใช้โปรแกรมที่ได้มาพร้อมกับตัวโปรแกรม ซึ่งเป็นคู่มือภาค ภาษาอังกฤษ หากแปลเป็นภาษาไทยตรงไหนผิดพลาด ต้องขออภัยด้วย เนื่องจากอาศัยการแปลศัพท์ด้วยตัวเอง)