คอมพิวเตอร์ Windows อินเทอร์เน็ต

Tcpdump วิธีหยุดหลังจากเวลาที่กำหนด Tcpdump เป็นคู่มือที่มีประโยชน์พร้อมตัวอย่าง การแสดงแพ็กเก็ตที่ดักจับใน HEX และ ASCII โดยใช้ tcpdump -xx

หากคุณต้องการวิเคราะห์หรือสกัดกั้นแพ็กเก็ตเครือข่ายใน Linux วิธีที่ดีที่สุดคือใช้ยูทิลิตี้คอนโซลสำหรับสิ่งนี้ tcpdump. แต่ปัญหาเกิดขึ้นในการจัดการที่ค่อนข้างซับซ้อน ดูเหมือนว่าผู้ใช้ทั่วไปจะไม่สะดวกในการทำงานกับยูทิลิตี้นี้ แต่นี่เป็นเพียงแวบแรกเท่านั้น บทความนี้จะอธิบายวิธีการทำงานของ tcpdump มีรูปแบบใด วิธีใช้งาน และยังมีตัวอย่างการใช้งานอีกมากมาย

อ่าน: คำแนะนำสำหรับการตั้งค่าการเชื่อมต่ออินเทอร์เน็ตใน Ubuntu , Debian , Ubuntu Server

นักพัฒนาระบบปฏิบัติการบน Linux ส่วนใหญ่มียูทิลิตี้ tcpdump ในรายการที่ติดตั้งไว้ล่วงหน้า แต่ถ้าด้วยเหตุผลบางอย่างไม่ได้อยู่ในการแจกจ่ายของคุณ คุณสามารถดาวน์โหลดและติดตั้งผ่าน "เทอร์มินัล". หากระบบปฏิบัติการของคุณใช้ Debian และนี่คือ Ubuntu, Linux Mint, Kali Linux และอื่นๆ คุณต้องเรียกใช้คำสั่งนี้:

sudo apt ติดตั้ง tcpdump

ระหว่างการติดตั้ง คุณต้องป้อนรหัสผ่าน โปรดทราบว่าเมื่อพิมพ์แล้วไม่แสดง คุณต้องป้อนสัญลักษณ์เพื่อยืนยันการติดตั้งด้วย "ด"แล้วกด เข้า.

หากคุณมี Red Hat, Fedora หรือ CentOS คำสั่งการติดตั้งจะมีลักษณะดังนี้:

sudo yam ติดตั้ง tcpdump

หลังจากติดตั้งยูทิลิตี้แล้ว คุณจะสามารถใช้งานได้ทันที สิ่งนี้และสิ่งอื่น ๆ อีกมากมายจะกล่าวถึงในข้อความต่อไป

ไวยากรณ์

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

ตัวเลือก tcpdump -i ตัวกรองอินเทอร์เฟซ

เมื่อใช้คำสั่ง คุณต้องระบุอินเทอร์เฟซที่จะติดตาม ตัวกรองและตัวเลือกไม่จำเป็นต้องใช้ตัวแปร แต่อนุญาตให้ปรับแต่งเพิ่มเติมได้

ตัวเลือก

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

ตัวเลือก คำนิยาม
-A ให้คุณจัดเรียงแพ็คเกจด้วยรูปแบบ ASCII
-l เพิ่มฟังก์ชันการเลื่อน
-ผม หลังจากป้อนแล้ว คุณต้องระบุอินเทอร์เฟซเครือข่ายที่จะตรวจสอบ หากต้องการเริ่มตรวจสอบอินเทอร์เฟซทั้งหมด ให้ป้อนคำว่า "ใดๆ" หลังตัวเลือก
-ค สิ้นสุดกระบวนการติดตามหลังจากตรวจสอบจำนวนแพ็คเก็ตที่ระบุ
-w สร้างไฟล์ข้อความพร้อมรายงานการตรวจสอบ
-e แสดงระดับการเชื่อมต่ออินเทอร์เน็ตของแพ็กเก็ตข้อมูล
-L แสดงเฉพาะโปรโตคอลที่รองรับโดยอินเทอร์เฟซเครือข่ายที่ระบุ
-ค สร้างไฟล์อื่นในระหว่างการดักจับแพ็คเกจหากไฟล์มีขนาดใหญ่กว่าไฟล์ที่กำหนด
-r เปิดไฟล์สำหรับการอ่านที่สร้างด้วยตัวเลือก -w
-j รูปแบบ TimeStamp จะใช้ในการเขียนแพ็กเก็ต
-J ให้คุณดูรูปแบบ TimeStamp ที่มีอยู่ทั้งหมด
-G ทำหน้าที่สร้างไฟล์ที่มีบันทึก ตัวเลือกนี้ยังต้องการค่าชั่วคราว หลังจากนั้นจะมีการสร้างบันทึกใหม่
-v, -vv, -vvv ขึ้นอยู่กับจำนวนอักขระในตัวเลือก ผลลัพธ์ของคำสั่งจะมีรายละเอียดมากขึ้น (การเพิ่มขึ้นเป็นสัดส่วนโดยตรงกับจำนวนอักขระ)
-f แสดงชื่อโดเมนของที่อยู่ IP ในเอาต์พุต
-F อนุญาตให้อ่านข้อมูลไม่ได้จากอินเทอร์เฟซเครือข่าย แต่จากไฟล์ที่ระบุ
-D แสดงอินเทอร์เฟซเครือข่ายทั้งหมดที่สามารถใช้ได้
-น ปิดใช้งานการแสดงชื่อโดเมน
-Z ระบุผู้ใช้ภายใต้บัญชีที่ไฟล์ทั้งหมดจะถูกสร้างขึ้น
-K ข้ามการวิเคราะห์เช็คซัม
-q การสาธิตข้อมูลโดยย่อ
-ชม อนุญาตให้ตรวจหาส่วนหัว 802.11s
-ฉัน ใช้เมื่อจับแพ็กเก็ตในโหมดมอนิเตอร์

เมื่อวิเคราะห์ตัวเลือกแล้วเราจะไปที่แอปพลิเคชันของพวกเขาโดยตรง ในระหว่างนี้ จะพิจารณาตัวกรอง

ตัวกรอง

ดังที่กล่าวไว้ตอนต้นของบทความ คุณสามารถเพิ่มตัวกรองให้กับไวยากรณ์ tcpdump ตอนนี้ความนิยมสูงสุดของพวกเขาจะได้รับการพิจารณา:

ตัวกรองด้านบนทั้งหมดสามารถรวมเข้าด้วยกันได้ ดังนั้นในการออกคำสั่ง คุณจะเห็นเฉพาะข้อมูลที่คุณต้องการดูเท่านั้น เพื่อให้เข้าใจการใช้ตัวกรองข้างต้นโดยละเอียดยิ่งขึ้น ควรยกตัวอย่าง

ตัวอย่างการใช้

ตอนนี้ ไวยากรณ์ที่ใช้ทั่วไปของคำสั่ง tcpdump จะได้รับ เป็นไปไม่ได้ที่จะแสดงรายการทั้งหมด เนื่องจากอาจมีรูปแบบที่หลากหลายได้ไม่จำกัด

การดูรายการอินเตอร์เฟส

ขอแนะนำให้ผู้ใช้แต่ละคนตรวจสอบรายชื่ออินเทอร์เฟซเครือข่ายทั้งหมดที่สามารถติดตามได้ในตอนแรก จากตารางข้างบนนี้ เรารู้ว่าต้องใช้ option -Dดังนั้นในเทอร์มินัลให้รันคำสั่งต่อไปนี้:

ดังที่คุณเห็น มีแปดอินเทอร์เฟซในตัวอย่าง ซึ่งสามารถดูได้โดยใช้คำสั่ง tcpdump บทความจะยกตัวอย่างของ ppp0คุณสามารถใช้อย่างอื่นได้

การจราจรปกติ

หากคุณต้องการติดตามอินเทอร์เฟซเครือข่ายหนึ่ง คุณสามารถทำได้โดยใช้ตัวเลือก -ผม. อย่าลืมระบุชื่อของอินเทอร์เฟซหลังจากป้อน นี่คือตัวอย่างของคำสั่งดังกล่าว:

sudo tcpdump -i ppp0

โปรดทราบ: ก่อนคำสั่ง คุณต้องป้อน "sudo" เนื่องจากต้องใช้สิทธิ์ superuser

หมายเหตุ: หลังจากกด Enter "เทอร์มินัล" จะแสดงแพ็กเก็ตที่ดักจับอย่างต่อเนื่อง หากต้องการหยุดการไหล คุณต้องกดคีย์ผสม Ctrl + C

หากคุณรันคำสั่งโดยไม่มีตัวเลือกและตัวกรองเพิ่มเติม คุณจะเห็นรูปแบบต่อไปนี้สำหรับการแสดงแพ็กเก็ตที่ติดตาม:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : แฟล็ก , seq 1:595, ack 1118, ชนะ 6494, ตัวเลือก , ความยาว 594

ไฮไลท์อยู่ที่ไหน:

  • สีน้ำเงิน - เวลาที่รับพัสดุ
  • สีเขียว - ที่อยู่ผู้ส่ง
  • สีม่วง - ที่อยู่ผู้รับ
  • สีเทา - ข้อมูลเพิ่มเติมเกี่ยวกับ TCP;
  • สีแดง - ขนาดแพ็คเก็ต (แสดงเป็นไบต์)

ไวยากรณ์นี้มีความสามารถในการแสดงใน window "เทอร์มินัล"โดยไม่มีตัวเลือกเพิ่มเติม

จับการจราจรด้วยตัวเลือก -v

ดังที่ทราบจากตาราง option -vช่วยให้คุณเพิ่มปริมาณข้อมูลได้ ลองมาดูตัวอย่างกัน ตรวจสอบอินเทอร์เฟซเดียวกัน:

sudo tcpdump -v -i ppp0

ที่นี่คุณสามารถสังเกตได้ว่าบรรทัดต่อไปนี้ปรากฏในผลลัพธ์:

IP (tos 0x0, ttl 58 , id 30675, offset 0, flags , โปรโต TCP (6) , ความยาว 52

ไฮไลท์อยู่ที่ไหน:

  • สีส้ม - รุ่นโปรโตคอล
  • สีน้ำเงิน - อายุการใช้งานโปรโตคอล
  • สีเขียว - ความยาวส่วนหัวของฟิลด์
  • สีม่วง - รุ่นแพ็คเกจ tcp;
  • สีแดง - ขนาดแพ็คเก็ต

คุณยังสามารถเพิ่มตัวเลือกให้กับไวยากรณ์คำสั่ง -vvหรือ -vvvซึ่งจะช่วยเพิ่มปริมาณข้อมูลที่แสดงบนหน้าจอ

ตัวเลือก -w และ -r

ตารางตัวเลือกกล่าวถึงความสามารถในการบันทึกข้อมูลเอาต์พุตทั้งหมดไปยังไฟล์แยกต่างหากเพื่อให้สามารถดูได้ในภายหลัง นี่คือตัวเลือก -w. การใช้งานค่อนข้างง่าย เพียงระบุในคำสั่ง จากนั้นป้อนชื่อไฟล์ในอนาคตที่มีนามสกุล ".pcap". ลองมาดูตัวอย่าง:

sudo tcpdump -i ppp0 -w file.pcap

โปรดทราบ: ขณะเขียนบันทึกไปยังไฟล์ ข้อความจะไม่ปรากฏบนหน้าจอ "เทอร์มินัล"

เมื่อคุณต้องการดูผลลัพธ์ที่บันทึกไว้ คุณต้องใช้ตัวเลือก -rหลังจากนั้นให้เขียนชื่อไฟล์ที่บันทึกไว้ก่อนหน้านี้ มันถูกนำไปใช้โดยไม่มีตัวเลือกและตัวกรองอื่น:

sudo tcpdump -r file.pcap

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

กรองตาม IP

จากตารางตัวกรองเรารู้ว่า dstอนุญาตให้คุณแสดงบนหน้าจอคอนโซลเฉพาะแพ็กเก็ตที่ได้รับตามที่อยู่ที่ระบุไว้ในไวยากรณ์คำสั่ง ดังนั้นจึงสะดวกมากในการดูแพ็กเก็ตที่ได้รับจากคอมพิวเตอร์ของคุณ ในการดำเนินการนี้ ในคำสั่ง คุณเพียงแค่ระบุที่อยู่ IP ของคุณ:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

อย่างที่คุณเห็น นอกเหนือจาก dstในคำสั่งเรายังลงทะเบียนตัวกรอง ip. กล่าวอีกนัยหนึ่ง เราบอกให้คอมพิวเตอร์ใส่ใจกับที่อยู่ IP ของพวกเขาเมื่อเลือกแพ็กเก็ต ไม่ใช่พารามิเตอร์อื่นๆ

คุณยังสามารถกรองแพ็กเก็ตขาออกตาม IP ลองใช้ IP ของเราเป็นตัวอย่าง นั่นคือตอนนี้เราจะติดตามว่าแพ็กเก็ตใดที่ส่งจากคอมพิวเตอร์ของเราไปยังที่อยู่อื่น เมื่อต้องการทำเช่นนี้ เรียกใช้คำสั่งต่อไปนี้:

sudo tcpdump -i ppp0 ip src 10.0.6.67

อย่างที่คุณเห็น ในไวยากรณ์คำสั่ง เราได้เปลี่ยน filter dstบน srcจึงบอกให้เครื่องค้นหาผู้ส่งทาง IP

กรองโดย HOST

โดยเปรียบเทียบกับ IP ในคำสั่ง เราสามารถระบุตัวกรอง เจ้าภาพเพื่อคัดแยกแพ็คเก็ตกับโฮสต์ที่สนใจ นั่นคือในไวยากรณ์แทนที่จะเป็นที่อยู่ IP ของผู้ส่ง / ผู้รับ คุณจะต้องระบุโฮสต์ของมัน ดูเหมือนว่านี้:

sudo tcpdump -i ppp0 dst โฮสต์ google-public-dns-a.google.com

ในรูปจะเห็นได้ว่าใน "เทอร์มินัล"เฉพาะแพ็กเก็ตที่ส่งจาก IP ของเราไปยังโฮสต์ google.com เท่านั้นที่จะแสดง อย่างที่คุณเข้าใจ แทนที่จะเป็นโฮสต์ของ Google คุณสามารถป้อนอย่างอื่นได้

ในกรณีของการกรองตาม IP ในรูปแบบไวยากรณ์ dstสามารถแทนที่ด้วย srcเพื่อดูแพ็กเก็ตที่ส่งไปยังคอมพิวเตอร์ของคุณ:

sudo tcpdump -i ppp0 src โฮสต์ google-public-dns-a.google.com

โปรดทราบ: ตัวกรองโฮสต์ต้องอยู่หลัง dst หรือ src มิฉะนั้น คำสั่งจะทำให้เกิดข้อผิดพลาด ในกรณีของการกรองตาม IP ตรงกันข้าม dst และ src มาก่อนตัวกรอง ip

การใช้ตัวกรอง และ และ หรือ

หากคุณต้องการใช้ตัวกรองหลายตัวพร้อมกันในคำสั่งเดียว สำหรับสิ่งนี้ คุณต้องใช้ตัวกรอง และหรือ หรือ(แล้วแต่กรณี). การระบุตัวกรองในไวยากรณ์และการแยกตัวกรองด้วยโอเปอเรเตอร์เหล่านี้ ถือว่าคุณ "ทำให้" ตัวกรองทำงานเป็นหนึ่งเดียว ตัวอย่างเช่น ดูเหมือนว่านี้:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 หรือ ip src 95.47.144.254

จาก syntax ของคำสั่ง ชัดเจนว่าเราต้องการ display "เทอร์มินัล"แพ็กเก็ตทั้งหมดที่ส่งไปยังที่อยู่ 95.47.144.254 และแพ็กเก็ตที่ได้รับจากที่อยู่เดียวกัน คุณยังสามารถเปลี่ยนตัวแปรบางตัวในนิพจน์นี้ได้ ตัวอย่างเช่น แทนที่จะระบุ IP ให้ระบุ HOST หรือแทนที่ที่อยู่ด้วยตนเองโดยตรง

พอร์ตและตัวกรอง portrange

กรอง ท่าดีในกรณีที่คุณต้องการรับข้อมูลเกี่ยวกับแพ็กเก็ตที่มีพอร์ตเฉพาะ ดังนั้น หากคุณต้องการดูเฉพาะการตอบกลับหรือการสืบค้น DNS คุณต้องระบุพอร์ต 53:

sudo tcpdump -vv -i ppp0 พอร์ต 53

หากคุณต้องการดูแพ็กเก็ต http คุณต้องป้อนพอร์ต 80:

sudo tcpdump -vv -i ppp0 พอร์ต 80

เหนือสิ่งอื่นใด คุณสามารถติดตามพอร์ตต่างๆ ได้ในคราวเดียว สำหรับสิ่งนี้จะใช้ตัวกรอง portrange:

sudo tcpdump portrange 50-80

อย่างที่คุณเห็นร่วมกับตัวกรอง portrangeไม่จำเป็นต้องระบุตัวเลือกเพิ่มเติม คุณเพียงแค่ต้องตั้งค่าช่วง

การกรองโปรโตคอล

คุณยังสามารถแสดงเฉพาะการรับส่งข้อมูลที่ตรงกับโปรโตคอลเฉพาะ เมื่อต้องการทำเช่นนี้ ให้ใช้ชื่อของโปรโตคอลนี้เป็นตัวกรอง มาดูตัวอย่างกัน udp:

sudo tcpdump -vvv -i ppp0 udp

ดังที่คุณเห็นในภาพ หลังจากรันคำสั่งใน "เทอร์มินัล"แสดงเฉพาะแพ็กเก็ตที่มีโปรโตคอลเท่านั้น udp. ดังนั้น คุณสามารถกรองตามผู้อื่นได้ เช่น arp:

sudo tcpdump -vvv -i ppp0 arp

หรือ tcp:

sudo tcpdump -vvv -i ppp0 tcp

ตัวกรองสุทธิ

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

sudo tcpdump -i ppp0 net 192.168.1.1

การกรองขนาดแพ็คเก็ต

เราไม่ได้พูดถึงตัวกรองที่น่าสนใจอีกสองตัว: น้อยและ มากกว่า. จากตารางที่มีตัวกรอง เรารู้ว่าพวกมันทำหน้าที่แสดงแพ็กเก็ตข้อมูลที่ใหญ่ขึ้น ( น้อย) หรือน้อยกว่า ( มากกว่า) ของขนาดที่ระบุหลังจากป้อนแอตทริบิวต์

สมมติว่าเราต้องการตรวจสอบเฉพาะแพ็กเก็ตที่ไม่เกินเครื่องหมาย 50 บิต จากนั้นคำสั่งจะมีลักษณะดังนี้:

sudo tcpdump -i ppp0 น้อยกว่า 50

ตอนนี้ขอแสดงใน "เทอร์มินัล"แพ็กเก็ตที่มีขนาดใหญ่กว่า 50 บิต:

sudo tcpdump -i ppp0 มากกว่า 50

อย่างที่คุณเห็น มันถูกนำไปใช้ในลักษณะเดียวกัน ความแตกต่างเพียงอย่างเดียวคือในชื่อของตัวกรอง

บทสรุป

ท้ายบทความสรุปได้ว่าคำสั่ง tcpdumpเป็นเครื่องมือที่ยอดเยี่ยมที่คุณสามารถติดตามแพ็กเก็ตข้อมูลที่ส่งผ่านอินเทอร์เน็ต แต่สำหรับสิ่งนี้มันไม่เพียงพอเพียงแค่ป้อนคำสั่งใน "เทอร์มินัล". คุณสามารถบรรลุผลลัพธ์ที่ต้องการได้ก็ต่อเมื่อคุณใช้ตัวเลือกและตัวกรองทุกประเภท

สำหรับระบบ UNIX มีผู้ดมกลิ่นและตัววิเคราะห์ปริมาณการใช้งานที่แตกต่างกันมากมายด้วยอินเทอร์เฟซแบบกราฟิกที่สะดวกและชุดฟังก์ชันที่หลากหลาย แต่ไม่มีใครสามารถเปรียบเทียบความยืดหยุ่น ความเก่งกาจ และความแพร่หลายกับ tcpdump ที่ล้าสมัยได้ ยูทิลิตีนี้รวมอยู่ในลีนุกซ์รุ่นต่างๆ และระบบ BSD ทั้งหมดตั้งแต่แกะกล่อง และสามารถช่วยคุณได้เมื่อไม่มีเครื่องมืออื่นๆ

บทนำ

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

Tcpdump ถือกำเนิดขึ้นเมื่อเกือบ 25 ปีที่แล้วที่ University of Berkeley ยังคงได้รับการพัฒนาอย่างจริงจังและยังคงเป็นมาตรฐานในบรรดาเครื่องมือที่คล้ายกันสำหรับระบบปฏิบัติการ UNIX ไลบรารีการดักจับแพ็กเก็ต libpcap ที่พัฒนาขึ้นโดยเฉพาะสำหรับไลบรารีนี้ ถูกใช้งานโดยผู้ดมกลิ่นเกือบทุกคนสำหรับระบบ UNIX และโปรแกรมที่คล้ายกันมากมายสำหรับ Windows

ในบทความนี้ เราจะครอบคลุมทุกแง่มุมของการทำงานกับ tcpdump ตั้งแต่พื้นฐานการทำงานกับโปรแกรมไปจนถึงวิธีใช้ยูทิลิตี้เพื่อตรวจจับการโจมตีเครือข่าย ความผิดปกติ และความล้มเหลวประเภทต่างๆ

อยู่คนเดียวกับคอนโซล

ลองคิดดูว่า tcpdump ทำงานอย่างไรและควรเข้าหาจากด้านใด เปิดเทอร์มินัลแล้วเรียกใช้โปรแกรมในฐานะรูท (เช่นเดียวกับการดมกลิ่น tcpdump ต้องมีการเข้าถึงอินเทอร์เฟซเครือข่ายเต็มรูปแบบ) ระบุชื่อของอินเทอร์เฟซเครือข่ายและจำกัดจำนวนแพ็กเก็ตเอาต์พุตเป็นสิบ:

# tcpdump -i wlan0 -c 10 -n

สวิตช์ -n ปิดใช้งานการแปลที่อยู่ IP เป็นชื่อ DNS ตอนนี้เรามาลองติดตามการแลกเปลี่ยนกับโฮสต์เฉพาะเช่นกับเราเตอร์ที่บ้าน:

# tcpdump -i wlan0 -c 10 -n โฮสต์ 192.168.0.1 และพอร์ต 53

มาดูกันว่า tcpdump ส่งอะไรให้เราบ้าง โดยใช้สองบรรทัดที่แสดงในภาพหน้าจอ "การสืบค้น DNS ผ่านสายตาของ tcpdump" เป็นตัวอย่าง เป็นที่เข้าใจได้ง่ายว่านี่คือคำขอ DNS (พอร์ต 53) จากโฮสต์ 192.168.0.101 ไปยังโฮสต์ 192.168.0.1 และการตอบสนองที่ตามมา แต่ตัวเลขและเครื่องหมายอื่นๆ ทั้งหมดหมายความว่าอย่างไร


ตัวเลข 16:22:41.340105 คือเวลาที่ส่งแพ็คเก็ต รวมถึงหนึ่งในล้านของวินาที (ที่เรียกว่า frac) IP ตัวอักษรสองตัว ตามที่คุณอาจเดา ระบุโปรโตคอลเลเยอร์เครือข่ายที่ใช้ ตามด้วยที่อยู่: พอร์ตส่งและที่อยู่: พอร์ตปลายทางของแพ็กเก็ต ทุกอย่างที่มาหลังโคลอนโดยตรงขึ้นอยู่กับการขนส่งหรือโปรโตคอลเลเยอร์แอปพลิเคชันที่ใช้ tcpdump คุ้นเคยกับโปรโตคอลบางตัวและสามารถถอดรหัสให้อยู่ในรูปแบบที่มนุษย์สามารถอ่านได้ ซึ่งจะปล่อยให้ส่วนอื่นๆ เป็นเหมือนเดิม และแสดงรายการเนื้อหาของแพ็กเก็ต ในกรณีนี้ tcpdump ถอดรหัสข้อความ DNS และส่งคืนสตริง 49244+ A? ya.ru. (23) ซึ่งหมายถึง: คำขอ (A?) ถูกส่งไปยังที่อยู่ที่เกี่ยวข้องกับชื่อ ya.ru. ความยาวแพ็กเก็ตทั้งหมดลบส่วนหัว TCP / IP คือ 23 ไบต์ หลักแรกคือรหัสคำขอ

ในบรรทัดถัดไป เราจะเห็นคำตอบ ซึ่งรูปแบบการนำเสนอเกือบจะเหมือนกับคำขอ โดยมีความแตกต่างเพียงอย่างเดียวคือตอนนี้หลังจากตัวระบุคำขอมีข้อมูลเกี่ยวกับจำนวนระเบียนที่พบ (8/2/3) และ บันทึกตัวเอง (A 213.180.204.3, A 77.88.21.3 , A 87.250.250.3...)

คลังแสงของ tcpdump รองรับโปรโตคอลมากมาย ซึ่งสามารถนำเสนอในรูปแบบข้อมูลที่อ่านได้เกี่ยวกับโปรโตคอล TCP, UDP และ ICMP, SMB / CIFS, NFS, AFS, AppleTalk แต่ถ้า tcpdump ไม่รู้อะไรเกี่ยวกับโปรโตคอลเลเยอร์แอปพลิเคชันที่กำลังใช้อยู่ หรือไม่สามารถระบุได้ล่ะ ในสถานการณ์ปกติ มันจะแสดงผลข้อมูลเกี่ยวกับแพ็คเกจ อาจมีลักษณะดังนี้:

แฟล็ก [.], seq 3666073194:3666074622, ack 3281095139, win 2000, options , length 1428

นี่คือแพ็กเก็ต TCP รูปแบบของข้อมูลที่แสดงใน tcpdump มีดังนี้ (ฟิลด์คั่นด้วยเครื่องหมายจุลภาค):

  • ธง - ตั้งธง แสดงด้วยสัญลักษณ์ S (SYN), F (FIN), P (PUSH) และ R (RST) จุดหมายถึงไม่มีการตั้งค่าสถานะ
  • data-seqno - อธิบายข้อมูลที่มีอยู่ในแพ็กเก็ตในรูปแบบต่อไปนี้ first:last โดยที่ first และ last คือหมายเลขลำดับของไบต์แรกและสุดท้ายของข้อมูลที่ส่ง nbytes;
  • ack - หมายเลขลำดับถัดไป (ISN + 1);
  • หน้าต่าง - ขนาดหน้าต่าง;
  • ตัวเลือก - สามารถระบุข้อมูลเพิ่มเติมได้ที่นี่ เช่น (ขนาดเซ็กเมนต์สูงสุด)
  • ความยาว - ความยาวของแพ็กเก็ต

ข้อมูลทั้งหมดนี้มีประโยชน์มากในขณะที่ศึกษาหรือแก้จุดบกพร่องโปรโตคอลและแอปพลิเคชันเครือข่าย แต่ไม่ได้บอกอะไรเราเกี่ยวกับเนื้อหา หากต้องการดูเนื้อหาของแพ็คเกจในรูปแบบเลขฐานสิบหก ให้ใช้แฟล็ก -X:

# tcpdump -i wlan0 -c 10 -n -X โฮสต์ 192.168.0.1 และพอร์ต 80

ฟังก์ชันนี้มีประโยชน์มากสำหรับการแยกวิเคราะห์โปรโตคอลที่ข้อมูลถูกส่งเป็นข้อความธรรมดา เช่น HTTP สำหรับโปรโตคอลไบนารีและโปรโตคอลที่มีการเข้ารหัส แน่นอนว่าจะไม่มีประโยชน์
คุณยังสามารถใช้แฟล็ก -v เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับแพ็กเกจ จากนั้นหลังจาก IP ในวงเล็บ ข้อมูลโดยละเอียดเกี่ยวกับแพ็กเก็ต IP จะปรากฏขึ้น:

(tos 0x0, ttl 64, id 8339, offset 0, flags , โปรโต UDP (17), ความยาว 51)

โดยทั่วไปแล้วทุกอย่างที่นี่ค่อนข้างธรรมดา อันดับแรกคือประเภทของบริการ (TOS) ตามด้วยแพ็กเก็ต time to live (TTL) ตัวระบุแพ็กเก็ต ออฟเซ็ตจากจุดเริ่มต้นของแพ็กเก็ตแรกในเชน แฟล็ก โปรโตคอลเลเยอร์การขนส่งที่ใช้ (TCP, UDP, ICMP) และ ความยาว.


คุณสมบัติขั้นสูง

เราได้ครอบคลุมคุณลักษณะที่สำคัญที่สุดส่วนใหญ่ของ tcpdump แล้ว แต่ฟังก์ชันของ tcpdump นั้นกว้างกว่ามาก ตัวอย่างเช่น เราใช้คำสั่งโฮสต์และพอร์ตเพื่อระบุที่อยู่และพอร์ตที่เราต้องการกรองเอาต์พุต แต่ถ้าเราต้องการเห็นเฉพาะแพ็กเก็ตที่ส่งไปยังที่อยู่ที่ระบุแต่ไม่ต้องการส่งออก คุณสามารถใช้ตัวดำเนินการ src สำหรับสิ่งนี้:

# tcpdump -i wlan0 -c 10 -n src 192.168.0.1

นอกจากนี้ยังมีเวอร์ชันย้อนกลับ dst ซึ่งออกแบบมาเพื่อระบุที่อยู่ปลายทาง ดังที่แสดงไว้ข้างต้น ตัวดำเนินการทั้งหมดสามารถรวมกันได้โดยใช้ตัวดำเนินการ และ (การตรวจสอบการรับส่งข้อมูลเครือข่าย ยกเว้นเซสชัน SSH และคำขอ DNS):

# tcpdump -i wlan0 พอร์ตไม่ใช่ 22 และพอร์ตไม่ใช่ 53

คุณยังสามารถใช้หรือ (หรือ) และยกเว้น (ไม่) นอกจากนี้ tcpdump ยังเข้าใจช่วงพอร์ตอีกด้วย:

# tcpdump -i wlan0 -c 10 -n portrange 21-23

สามารถกรองแพ็กเก็ตตามขนาดได้:

# tcpdump -i wlan0 -c 10 -n > 32 และ<= 128

และเข้าใจซับเน็ตมาสก์:

# tcpdump -i wlan0 c 10 -n src net 192.168.0.0/16 และ dst net 10.0.0.0/8 หรือ 172.16.0.0/16

หนึ่งในคุณสมบัติที่น่าสนใจที่สุดของ tcpdump คือความสามารถในการกรองแพ็กเก็ตตามเนื้อหาของบิตหรือไบต์เฉพาะในส่วนหัวของโปรโตคอล สำหรับสิ่งนี้ รูปแบบต่อไปนี้ถูกใช้: proto โดยที่ proto คือโปรโตคอล expr คือ offset ในหน่วยไบต์จากจุดเริ่มต้นของส่วนหัวของแพ็กเก็ต และ size คือฟิลด์ตัวเลือกที่ระบุความยาวของข้อมูลที่เป็นปัญหา (ค่าเริ่มต้นคือ 1 ไบต์ ). ตัวอย่างเช่น ในการกรองเฉพาะแพ็กเก็ตที่มีชุดแฟล็ก SYN (TCP handshake initiation) คุณจะต้องใช้รายการต่อไปนี้:

# tcpdump "tcp==2"

มันทำงานอย่างไร? ง่ายมาก. ส่วนหัว TCP ขนาด 13 ไบต์มีแปดแฟล็ก อย่างละหนึ่งบิต บิตที่สองสงวนไว้สำหรับแฟล็ก SYN รายการด้านบนเป็นเพียงการตรวจสอบเพื่อดูว่ามีการตั้งค่าบิตนี้หรือไม่ อย่างไรก็ตาม รูปแบบที่อ่านง่ายกว่าของรายการนี้จะมีลักษณะดังนี้:

# tcpdump "tcp & tcp-syn != 0"

การใช้งานจริง

ยูทิลิตี tcpdump มักใช้เพื่อวัตถุประสงค์สองประการ: เพื่อดีบักเครือข่าย แอปพลิเคชันเครือข่าย และโปรโตคอลใหม่ และเพื่อสอนพื้นฐานของ TCP/IP เราจะไปทางอื่นและใช้พลังของ tcpdump เพื่อตรวจจับการสแกนโฮสต์และการโจมตีเครือข่าย

ในรูป รูปที่ 1 แสดงการสแกนพอร์ต TCP แบบคลาสสิกที่ทำโดย Nmap ในบันทึก tcpdump คุณสามารถเห็นได้อย่างชัดเจนว่า Nmap จากที่อยู่ 192.168.0.100 พยายามสร้างการเชื่อมต่อ TCP กับพอร์ตต่างๆ อย่างไรโดยส่งแพ็กเก็ต SYN (S ในฟิลด์แฟล็ก) ขั้นแรก พอร์ต 8888 ถูกโพรบ แพ็กเก็ต RST ตอบสนอง ซึ่งหมายความว่าไม่มีบริการใดรับฟังบนพอร์ต จากนั้นพอร์ต 587 จะถูกโพรบด้วยผลลัพธ์เดียวกัน ในที่สุด Nmap จะส่งแพ็กเก็ต SYN ไปยังพอร์ต 22 (SSH) และรับการตอบสนองในรูปแบบของแพ็กเก็ต SYN-ACK:

192.168.0.100.43337 > 192.168.0.111.22: แฟล็ก[S], seq 2610024277, ... 43337 > 192.168.0.111.22: แฟล็ก [.], ack 1, ...

พอร์ตเปิดอยู่ และตอนนี้ Nmap สามารถปิดการเชื่อมต่อได้สำเร็จโดยส่งแพ็กเก็ต RST และย้ายไปยังพอร์ตถัดไป อย่างไรก็ตาม มันทำสิ่งที่ชาญฉลาดกว่า: มันส่งการรับทราบการรับแพ็กเก็ต ACK และย้ายไปยังพอร์ตถัดไปทันที ลักษณะการทำงานนี้ช่วยให้คุณหลีกเลี่ยงระบบตรวจจับการบุกรุกบางอย่างได้ แต่คุณไม่สามารถหลอกคนที่ติดอาวุธดมกลิ่นได้ง่ายๆ

ให้ความสนใจกับจำนวนพอร์ตที่จะแยกออกด้วยว่าพวกเขาไม่ได้สร้างแบบสุ่ม แต่จะถูกเลือกโดยคำนึงถึงความชุกมากที่สุด ซึ่งหมายความว่ากำลังดำเนินการสแกนอย่างรวดเร็ว หรือโดยเฉพาะอย่างยิ่ง Nmap มักจะทำงานโดยไม่มีแฟล็กใดๆ เลย



ทีนี้มาดูวิธีอื่นในการตรวจจับพอร์ตที่เปิดอยู่ - การสแกน SYN (nmap -sS) การสแกนประเภทนี้มักจะเรียกว่าซ่อน เนื่องจากในระหว่างนั้นจะไม่มีการสร้างการเชื่อมต่อ TCP แบบเต็ม ซึ่งหมายความว่าข้อมูลเกี่ยวกับข้อเท็จจริงของการเชื่อมต่อจะไม่รวมอยู่ในบันทึก เอาต์พุต tcpdump สำหรับการสแกนประเภทนี้แสดงในรูปที่ 1 2. คล้ายกับบันทึกของการสแกน TCP ปกติ แต่การตอบสนองของสแกนเนอร์ต่อพอร์ตที่เปิดอยู่ตอนนี้แตกต่างออกไป:

192.168.0.100.48585 > 192.168.0.111.22: แฟล็ก[S], seq 1679394613, ... 48585 > 192.168.0.111.22: แฟล็ก[R], seq 1679394614, ...

จะเห็นได้ว่าหลังจากได้รับแพ็กเก็ตการอนุมัติ SYN-ACK แล้ว เครื่องสแกนไม่ทำการเชื่อมต่อให้เสร็จสิ้น แต่จะยุติการเชื่อมต่อทันที หลีกเลี่ยงการเข้าไปในบันทึก ในรูป 3 คุณสามารถเห็นผลการสแกน UDP ทุกอย่างง่ายมากที่นี่ Nmap ระบุพอร์ตด้วยบริการ UDP ที่เป็นไปได้ โดยส่งแพ็กเก็ตที่มีความยาวเป็นศูนย์ไปยังแต่ละพอร์ต หากพอร์ตถูกปิด ระบบปฏิบัติการจะส่งข้อความกลับว่าไม่สามารถเข้าถึง ICMP:

16:41:48.798310 IP 192.168.0.100.61020 > 192.168.0.111.18869: UDP ความยาว 0

มิฉะนั้นพอร์ตจะถือว่าเปิด วิธีการสแกนอีกวิธีหนึ่งคือการสแกนเป็นโมฆะโดยส่งแพ็กเก็ตที่ไม่มีการตั้งค่าแฟล็ก (nmap -sN) ปฏิกิริยาต่อแพ็กเก็ตดังกล่าวอาจแตกต่างกันไปตามระบบปฏิบัติการ แต่อย่างที่คุณเห็นจากรายการต่อไปนี้ Linux ตอบสนองต่อแพ็กเก็ตโดยส่งแพ็กเก็ต RST:

192.168.0.100.39132 > 192.168.0.111.256: แฟล็ก , ชนะ 3072, ความยาว 0 192.168.0.111.256 > 192.168.0.100.39132: แฟล็ก , ...

ผู้โจมตีสามารถใช้การสแกน Xmas ซึ่งแพ็คเก็ตมีการตั้งค่าสถานะ FIN, URG และ PUSH (แพ็คเก็ตดูเหมือนจะเรืองแสงด้วยธงเหมือนต้นคริสต์มาส):

192.168.0.100.35331 > 192.168.0.111.5544: แฟล็ก , seq 3998959601, ชนะ 4096, urg 0, ความยาว 0

อย่างที่คุณเห็น ปฏิกิริยาต่อแพ็คเกจดังกล่าวเหมือนกัน การสแกน ACK (-sA) จะปรากฏในบันทึก tcpdump เมื่อส่งหลายแพ็กเก็ตด้วยการตั้งค่าสถานะ ACK และตอบกลับโดยส่งแพ็กเก็ต RST อย่างไรก็ตาม หากมีการติดตั้งไฟร์วอลล์บนระบบ จะไม่มีข้อความตอบกลับ และ Nmap จะสามารถเข้าใจได้ว่าพอร์ตนั้นกำลังถูกกรองหรือไม่

ด้วยความช่วยเหลือของ tcpdump คุณสามารถติดตามน้ำท่วมประเภทต่างๆ ได้ ตัวอย่างเช่น ฟลัด ICMP แบบคลาสสิกในบันทึกจะมีลักษณะดังนี้:

16:43:06.008305 IP 192.168.0.100 > 192.168.0.111: ประเภท ICMP-#68, ความยาว 1032 192.168.0.100 > 192.168.0.111: ประเภท ICMP- #183, ความยาว 1032 16:43:06.008831

สิ่งที่สำคัญเป็นพิเศษที่นี่คือฟิลด์ที่มีเวลาที่รับแพ็กเก็ต ไม่มีแอปพลิเคชันทั่วไปที่จะส่งข้อความ ICMP จำนวนมากในระยะเวลาเท่ากับหนึ่งในพันของวินาที น้ำท่วมประเภทอื่น (เช่น SYN) ถูกกำหนดในลักษณะเดียวกันทุกประการ

การโต้ตอบกับโปรแกรมอื่น ๆ

ข้อได้เปรียบที่สำคัญที่สุดอย่างหนึ่งของ tcpdump คือรูปแบบของรายงานในระหว่างการดำรงอยู่ของโปรแกรมได้กลายเป็นมาตรฐานสำหรับผู้ดมกลิ่นทั้งหมด และทุกวันนี้ เครื่องมือวิเคราะห์ปริมาณการใช้งานที่จริงจังมากหรือน้อยก็สามารถเข้าใจได้ในปัจจุบัน ตัวอย่างเช่น สามารถใช้ tcpdump เพื่อสร้างดัมพ์บนเครื่องระยะไกล จากนั้นส่งไปยังเครื่องโลคัลและแยกวิเคราะห์ด้วย wireshark:

$ ssh [ป้องกันอีเมล] tcpdump -w - "พอร์ต !22" | wireshark -k -i -

ที่นี่เราใช้ตัวเลือก -w - เพื่อเขียนดัมพ์ไปยัง stdout และเปลี่ยนเส้นทางไปยัง wireshark ที่ทำงานบนเครื่องท้องถิ่น ในทำนองเดียวกัน คุณสามารถวิเคราะห์การจราจรโดยใช้ snort:

$ ssh [ป้องกันอีเมล] xample.ru "tcpdump -nn -i eth1 -w -" | snort -c /etc/snort/snort.conf -r -

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

# tcpdump -nnvv -r dump.cap tcp | grep -v "tcp sum ok" | wc-l

ของแอดมิน

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

# tcpdump -nn -v -i eth0 -s 1500 -c 1 "อีเธอร์ == 0?2000"

ในทำนองเดียวกัน คุณสามารถดักจับแพ็กเก็ตทั้งหมดที่ส่งผ่านโปรโตคอล DHCP (DISCOVER, REQUEST, INFORM) เพื่อระบุปัญหาการเชื่อมต่อไคลเอ็นต์:

# tcpdump -i eth0 -vvv -s 1500 "((พอร์ต 67 หรือพอร์ต 68) และ (udp = 0x1))"

หรือดักจับแพ็กเก็ตที่ส่งโดยเป็นส่วนหนึ่งของการพิสูจน์ตัวตน POP3:

# tcpdump -i eth0 "พอร์ต TCP pop3 และ ip = 85 และ ip = 83" -s 1500 -n

เครือข่าย grep

sniffer tcpdump นั้นดีสำหรับความเก่งกาจและความสามารถที่หลากหลาย แต่มันไม่ง่ายและสะดวกที่จะใช้เพื่อค้นหาข้อมูลเฉพาะภายในแพ็กเก็ตที่ส่ง งานนี้จัดการได้ดีกว่ามากโดย ngrep ซึ่งออกแบบมาเพื่อแสดงแพ็กเก็ตเครือข่ายที่ส่งผ่านซึ่งตรงกับมาสก์ที่กำหนด

ตัวอย่างเช่น หากต้องการค้นหาพารามิเตอร์ที่ส่งผ่านโดยเมธอด GET และ POST ภายในเซสชัน HTTP คุณสามารถใช้คำสั่งต่อไปนี้:

# ngrep -l -q -d eth0 "^GET |^POST" tcp และพอร์ต 80

ค้นหาคนเกียจคร้าน:

# ngrep -i "game*|p0rn|adult" -W byline -d eth0 > slackers.txt

เราวิเคราะห์ทราฟฟิก SMTP บนอินเทอร์เฟซเครือข่ายทั้งหมด:

# ngrep -i "rcpt to|mail from" พอร์ต TCP smtp

ตัวเลือก tcpdump

ตารางแฟล็ก tcpdump ที่น่าสนใจและมีประโยชน์มากที่สุด

  • -i [อินเทอร์เฟซ] - อินเทอร์เฟซเครือข่ายเพื่อฟัง ระบุใด ๆ สำหรับทั้งหมด
  • -n อย่าแก้ไขที่อยู่ IP เป็นชื่อ DNS
  • -nn อย่าแปลที่อยู่ IP และหมายเลขพอร์ต
  • -X - แสดงเนื้อหาแพ็คเกจในรูปแบบข้อความและเลขฐานสิบหก
  • -XX - เช่นเดียวกับเนื้อหาของเฟรมอีเทอร์เน็ต
  • -v, -vv, -vvv - เพิ่มจำนวนข้อมูลและแพ็คเกจที่แสดง (มากขึ้น มากขึ้น ทุกอย่าง)
  • -c [n] แสดงเฉพาะ n แพ็กเก็ตแรก
  • -s [n] - จำนวนไบต์ที่แสดงสำหรับแต่ละแพ็กเก็ต (สามารถลดลงเพื่อให้อ่านง่ายขึ้นหรือเพิ่มสำหรับข้อมูลเพิ่มเติม)
  • -S - แสดงหมายเลขลำดับ TCP แบบสัมบูรณ์
  • -e - แสดงส่วนหัวของเฟรมอีเทอร์เน็ต
  • -q - แสดงข้อมูลน้อยลง (เพื่อให้อ่านง่าย)
  • -E - ถอดรหัสการรับส่งข้อมูล IPsec โดยใช้คีย์ที่ระบุ
  • -w - บันทึกโปรแกรมดัมพ์ไปยังไฟล์, อาร์กิวเมนต์ - ใช้เพื่อระบุ stdout

ข้อสรุป

ในมือของผู้ใช้ที่มีความรู้ tcpdump กลายเป็นเครื่องมือที่ทรงพลัง ไม่เพียงแต่สำหรับการดีบักเท่านั้น แต่สำหรับการวิจัยความผิดปกติด้วย ต้องขอบคุณโอเปอเรเตอร์และแฟล็กจำนวนมาก คุณสามารถใช้เพื่อออกจากเครือข่ายทางอากาศและสำรวจสิ่งที่คุณต้องการจริงๆ

Tcpdump เป็นเครื่องมือวิเคราะห์เครือข่ายที่มีประโยชน์มาก ซึ่งมีประโยชน์มากสำหรับทั้งผู้ดูแลระบบเครือข่ายและผู้รักษาความปลอดภัย โดยปกติ ในการรับข้อมูลสูงสุดเมื่อทำงานกับ tcpdump จำเป็นต้องมีความเข้าใจในสแต็กโปรโตคอล TCP / IP เพื่อความสะดวกคุณสามารถใช้โปรแกรมที่สะดวกและชาญฉลาดยิ่งขึ้นเช่น แต่มักจะมีสถานการณ์ที่ไม่สามารถติดตั้งบริการเพิ่มเติมบนเครื่องที่กำลังทดสอบได้จากนั้น tcpdump ก็ไม่สามารถถูกแทนที่ได้ผู้ดูแลระบบเพื่อประโยชน์ของแพ็กเก็ต การวิเคราะห์ ไม่ปลุก วางบนเซิร์ฟเวอร์ unix X- Windows โดยเฉพาะอย่างยิ่งเนื่องจากระบบยูนิกซ์ส่วนใหญ่ ยูทิลิตี้ tcpdump จะมาตามค่าเริ่มต้น

การทำความเข้าใจโปรโตคอล TCP/IP จะช่วยให้มีขอบเขตกว้างสำหรับการใช้ตัววิเคราะห์และการแก้ปัญหาและการแก้ไขปัญหาเครือข่ายโดยแยกวิเคราะห์แพ็กเก็ต เนื่องจากการใช้ยูทิลิตี้นี้ให้เกิดประโยชน์สูงสุดจำเป็นต้องมีความเข้าใจที่ดีเกี่ยวกับโปรโตคอลเครือข่ายและวิธีการทำงาน จึงเป็นเรื่องตลกที่วิศวกรจำเป็นต้องรู้และเข้าใจกลไกการสื่อสารเครือข่ายอยู่ดี รวมทั้ง tcpdump มีประโยชน์ในทุกด้าน ตั้งแต่การแก้ไขปัญหาไปจนถึงการศึกษาด้วยตนเอง

ด้านล่างนี้คือตัวเลือกบางส่วนที่จะช่วยให้คุณใช้งานยูทิลิตีนี้ได้อย่างครบถ้วนและมีรายละเอียดมากที่สุด โดยเฉพาะอย่างยิ่งเนื่องจากกล่องและปุ่มเหล่านี้ง่ายต่อการลืม และตัวอย่างเหล่านี้มีประโยชน์มากสำหรับการรีเฟรชหน่วยความจำ

สวิตช์แรกที่ใช้คือ -n ซึ่งห้ามไม่ให้พยายามแปลงที่อยู่เป็นชื่อโดเมน ซึ่งจะทำให้ที่อยู่ IP ที่สะอาดพร้อมพอร์ตแก่เรา

ประการที่สองคือ -X ซึ่งบอกให้แต่ละแพ็คเกจส่งออกทั้งเนื้อหาฐานสิบหก (ฐานสิบหก) และ ASCII ของแพ็คเกจ
และตัวเลือกสุดท้ายคือ -S ซึ่งเปลี่ยนผลลัพธ์ของการกำหนดหมายเลขสัมพันธ์ TCP เป็นค่าสัมบูรณ์ ประเด็นก็คือการนับเลขแบบสัมพัทธ์ ปัญหาบางอย่างอาจซ่อนเร้นจากความสนใจของคุณได้

คุณต้องเข้าใจว่าข้อได้เปรียบหลักของ tcpdump เหนือยูทิลิตี้อื่นๆ คือ อนุญาตให้แยกวิเคราะห์แพ็กเก็ตแบบละเอียดและแบบแมนนวลได้ คุณต้องจำไว้ว่าโดยค่าเริ่มต้น tcpdump จะใช้เฉพาะ 68 ไบต์แรกของแพ็กเก็ต ซึ่งรวมถึง หากคุณต้องการดูเพิ่มเติม คุณควรใช้สวิตช์ -s number โดยที่ number คือจำนวนไบต์ที่จะบันทึก หากตั้งค่าตัวเลขเป็น 0 การดักจับแพ็กเก็ตแบบเต็มจะเกิดขึ้น ดังนั้นจึงควรใช้ค่า 1514 ซึ่งจะให้การดักจับแพ็กเก็ตอีเทอร์เน็ตมาตรฐานแบบเต็ม

รายการคีย์ที่ใช้บ่อยที่สุด:
-c: ตั้งค่าให้ตรวจสอบขนาดของไฟล์ที่จับภาพก่อนการบันทึกครั้งต่อไปของแพ็คเกจที่จับภาพ หากมีขนาดใหญ่กว่านั้นไฟล์จะถูกบันทึกและการบันทึกจะไปยังไฟล์ใหม่
-e : พิมพ์ส่วนหัวของอีเธอร์เน็ต (เลเยอร์ลิงก์) ในแต่ละบรรทัดการถ่ายโอนข้อมูล
-i ใด ๆ: ฟังบนอินเทอร์เฟซทั้งหมด ในกรณีที่คุณต้องการการรับส่งข้อมูลทั้งหมด
-n: ปิดใช้งานการแปลที่อยู่ในโดเมนหรือชื่อสัญลักษณ์
-nn: ปิดใช้งานการแปลที่อยู่และพอร์ตเป็นชื่อโดเมนหรือสัญลักษณ์
-q: พิมพ์ข้อมูลสั้น ๆ โดยลดค่าเอาต์พุตข้อมูลโปรโตคอล
-X: ส่งออกทั้งเนื้อหาฐานสิบหกและ ASCII ของแพ็คเกจ
-v, -vv, -vvv: ระบุข้อมูลเพิ่มเติมเกี่ยวกับแพ็กเก็ตที่ดักจับที่จะส่งออก เพื่อให้สามารถวิเคราะห์ได้กว้างขึ้น
ตัวอย่างการใช้งาน:

# เอาต์พุตแพ็คเก็ตมาตรฐาน
tcpdump -nS
# ขยายเอาต์พุตมาตรฐาน
tcpdump -nnvvS
# การแยกวิเคราะห์แพ็กเก็ตลึก
tcpdump -nnvvXS
# ข้อมูลการจราจรโดยละเอียดที่สุด
tcpdump -nnvvXSs 1514

นิพจน์ช่วยให้คุณทำการสแกนที่ตรงเป้าหมายมากขึ้นและกำหนดประเภทการรับส่งข้อมูล ความสามารถในการใช้นิพจน์ทำให้ tcpdump เป็นเครื่องมือที่มีประสิทธิภาพมากในมือของผู้ดูแลระบบ นิพจน์มีสามประเภทหลัก: type, dir และ proto
ตัวเลือกของนิพจน์ประเภท ได้แก่ โฮสต์ เน็ต และพอร์ต
เพื่อแสดงทิศทางที่กำหนดโดย dir มีตัวเลือก src, dst, src หรือ dst และ src และ dst
นิพจน์มาตรฐานสองสาม:

โฮสต์ // วิเคราะห์ทราฟฟิกตามที่อยู่ IP (ใช้งานได้กับชื่อสัญลักษณ์หากไม่ได้ตั้งค่า -n)
tcpdump โฮสต์ 1.2.3.4

src, dst // วิเคราะห์ทราฟฟิกเฉพาะปลายทางหรือเครื่องส่งเท่านั้น
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6

net // จับการรับส่งข้อมูลที่เป็นของเครือข่ายเฉพาะ
tcpdump สุทธิ 1.2.3.0/24

proto // ทำงานร่วมกับ tcp, udp และ icmp ต้องจำไว้นะว่าไม่ได้กล่าวถึงโปรโต
tcpdump icmp

port // วิเคราะห์ทราฟฟิกจากพอร์ตเฉพาะ (ขาเข้าหรือขาออก)
พอร์ต tcpdump 3389

src, dst port // กรองตามพอร์ตขาเข้าหรือขาออก
tcpdump src พอร์ต 1025
tcpdump พอร์ต dst 3389

แต่เครื่องมือที่ทรงพลังที่สุดคือตัวถูกดำเนินการ ซึ่งช่วยให้คุณกำหนดเงื่อนไขสำหรับนิพจน์และตัวเลือกสำหรับการแยกข้อมูลที่ละเอียดยิ่งขึ้นเกี่ยวกับการรับส่งข้อมูลที่วิเคราะห์

และ
และ หรือ &&
หรือ
หรือ หรือ ||
ยกเว้น
ไม่หรือ!

การรับส่งข้อมูล TCP จากทรัพยากร 10.15.123.33 พร้อมพอร์ตปลายทาง 3379:

# tcpdump -nnvvS tcp และ src 10.15.123.33 และพอร์ต dst 3379

ปริมาณการใช้ข้อมูลที่มาจากเครือข่าย 192.168 กับปลายทางบนเครือข่าย 10 หรือ 172.16:

# tcpdump -nvX src net 192.168.0.0/16 และ dst net 10.0.0.0/8 หรือ 172.16.0.0/16

ปริมาณการใช้ที่ไม่ใช่ ICMP กับปลายทาง 192.168.0.2 และจากเครือข่าย 172.16:

# tcpdump -nvvXSs 1514 dst 192.168.0.2 และ src net 172.16.0.0/16 และไม่ใช่ icmp

การรับส่งข้อมูลจากโฮสต์ Eros หรือ Ares แต่ไม่ไปที่พอร์ต SSH มาตรฐาน (จำเป็นต้องมีการจำแนกชื่อสำหรับนิพจน์นี้):

# tcpdump -vv src eros หรือ ares และไม่ใช่ dst port 22

ดังที่คุณเห็นจากตัวอย่างข้างต้น เราสามารถสร้างนิพจน์ใดๆ เพื่อวัตถุประสงค์ใดก็ได้ นอกจากนี้ ด้วยการใช้ไวยากรณ์ที่ซับซ้อน เราสามารถแยกการเข้าชมประเภทใดก็ได้ออกจากการวิเคราะห์

นอกจากนี้ พึงระลึกไว้เสมอว่าเราสามารถสร้างการสืบค้นที่รวมกลุ่มและกลุ่มตัวเลือกที่ให้ไว้ในแบบสอบถามเดียว แต่เพื่อให้ยูทิลิตี tcpdump ให้ความสนใจกับยูทิลิตี tcpdump จะต้องอยู่ในวงเล็บโดยใช้นิพจน์ในเครื่องหมายคำพูดเดี่ยว:
การรับส่งข้อมูลมาจากโฮสต์ 10.0.2.4 ไปยังพอร์ตปลายทาง 3379 หรือ 22:
# tcpdump 'src 10.0.2.4 และ (dst port 3379 หรือ 22)'

นอกจากนี้ยังสามารถกรองตามแฟล็ก TCP เช่น เพื่อแยกแพ็กเก็ต SYN หรือ RST:

แยกวิเคราะห์แพ็กเก็ต URG ทั้งหมด:
# tcpdump 'tcp & 32 != 0'

แยกวิเคราะห์แพ็กเก็ต ACK ทั้งหมด:
# tcpdump 'tcp & 16 != 0'

แยกวิเคราะห์แพ็กเก็ต PSH ทั้งหมด:
# tcpdump 'tcp & 8 != 0'

แยกวิเคราะห์แพ็กเก็ต RST ทั้งหมด:
# tcpdump 'tcp & 4 != 0'

แยกวิเคราะห์แพ็กเก็ต SYN ทั้งหมด:
# tcpdump 'tcp & 2 != 0'

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

tcpdump เป็นเครื่องมือที่ทุกคนควรเรียนรู้เพื่อเป็นพื้นฐานในการวิเคราะห์แพ็กเก็ต

ติดตั้ง tcpdump ด้วย apt ติดตั้ง tcpdump (Ubuntu) หรือ yum ติดตั้ง tcpdump (Redhat/Centos)

เริ่มต้นด้วยคำสั่งพื้นฐานที่จะทำให้เราได้รับทราฟฟิก HTTPS:

tcpdump -nn พอร์ต SX 443

04:45:40.573686 IP 78.149.209.1110.27782 > 172.30.0.144 .443 : แฟล็ก [.], ack 278239097, ชนะ 28, ตัวเลือก , ความยาว 0 0x0000: 4500 0034 0014 0000 2e06 c005 4e8e d16e E..4........N..n 0x0010: ac1e 0090 6c86 01bb 8e0a b73e 1095 9779 ....l......>...y 0x0020: 8010 001c d202 0000 0101 080a 3803 7b55 ...........8.(U .) 0x0030: 4801 8100

คุณสามารถรับแพ็กเก็ตเดียวด้วย -c 1 หรือ หมายเลขด้วย -c n

สิ่งนี้แสดงให้เห็นการรับส่งข้อมูล HTTPS โดยมีการแสดงฐานสิบหกปรากฏที่ส่วนขวาของเอาต์พุต (อนิจจามันถูกเข้ารหัส) เพียงจำไว้ว่า—เมื่อไม่แน่ใจ ให้รันคำสั่งด้านบนกับพอร์ตที่คุณสนใจ และคุณควรจะออกเดินทาง

ตัวอย่าง

PacketWizard™ ไม่ได้เป็นเครื่องหมายการค้า แต่ควรเป็น

ผู้ปฏิบัติงานเตรียมที่จะเรียกใช้ tcpdump

เมื่อคุณสามารถรับทราฟฟิกพื้นฐานได้แล้ว เรามาดูตัวอย่างมากมายที่คุณอาจต้องการระหว่างทำงานด้านเครือข่าย การรักษาความปลอดภัย หรือ PacketWizard™ ประเภทใดก็ได้

ทุกอย่างบนอินเทอร์เฟซ

เพียงแค่ดูว่าเกิดอะไรขึ้นโดยดูที่สิ่งที่กระทบต่ออินเทอร์เฟซของคุณ

หรือได้รับ ทั้งหมดอินเทอร์เฟซด้วย -i any .

tcpdump -i eth0

ค้นหาปริมาณการใช้ข้อมูลตาม IP

หนึ่งในข้อความค้นหาที่พบบ่อยที่สุด โดยใช้ host คุณสามารถดูการรับส่งข้อมูลที่ไปยังหรือจาก 1.1.1.1

ประเภทนิพจน์:

โฮสต์ เน็ต และพอร์ต

src และ dst

โฮสต์ เน็ต และพอร์ต

tcp , udp , icmp และอีกมากมาย

tcpdump โฮสต์ 1.1.1.1

06:20:25.593207 IP 172.30.0.144.39270 > one.one.one.one .domain : 12790+ A? google.com. (28) 06:20:25.594510 IP one.one.one.one .domain > 172.30.0.144.39270: 12790 1/0/0 A 172.217.15.78 (44)

หากคุณต้องการดูการจราจรในทิศทางเดียวเท่านั้น คุณสามารถใช้ src และ dst

tcpdump src 1.1.1.1
tcpdump dst 1.0.0.1

การค้นหาแพ็กเก็ตตามเครือข่าย

หากต้องการค้นหาแพ็กเก็ตที่เข้าหรือออกจากเครือข่ายหรือซับเน็ตเฉพาะ ให้ใช้ตัวเลือกเน็ต

คุณสามารถรวมสิ่งนี้กับตัวเลือก src และ dst ได้เช่นกัน

tcpdump สุทธิ 1.2.3.0/24

รับเนื้อหาแพ็คเก็ตด้วย Hex Output

ผลลัพธ์ Hex มีประโยชน์เมื่อคุณต้องการดูเนื้อหาของแพ็กเก็ตที่เป็นปัญหา และมักจะใช้ดีที่สุดเมื่อคุณแยกตัวเลือกสองสามตัวเพื่อการตรวจสอบอย่างละเอียดยิ่งขึ้น

tcpdump -c 1 -X icmp

สรุป

นี่คือของกิน

  1. tcpdump เป็นเครื่องมือที่มีค่าสำหรับทุกคนที่ต้องการเข้าสู่เครือข่ายหรือ.
  2. วิธีที่ดิบมันเชื่อมต่อกับการรับส่งข้อมูล รวมกับความแม่นยำที่มีให้ในการตรวจสอบแพ็กเก็ต ทำให้เป็นเครื่องมือที่ดีที่สุดสำหรับการเรียนรู้ TCP/IP
  3. ตัววิเคราะห์โปรโตคอลอย่าง Wireshark นั้นยอดเยี่ยม แต่ถ้าคุณต้องการควบคุม packet-fu อย่างแท้จริง คุณต้องเป็นหนึ่งเดียวกับ tcpdump ก่อน

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

บันทึกย่อ

  1. ขณะนี้ฉันกำลังเขียนหนังสือเกี่ยวกับ tcpdump สำหรับ No Starch Press
  2. ภาพชั้นนำมาจาก SecurityWizardry.com
  3. ตัวกรองการแยกบางส่วนยืมมาจาก

ทำไมต้อง TCPDUMP?

Tcpdump เป็นเครื่องมือวิเคราะห์เครือข่ายชั้นนำสำหรับผู้เชี่ยวชาญด้านความปลอดภัย สำหรับผู้ที่ต้องการทำความเข้าใจ TCP / IP อย่างสมบูรณ์ จำเป็นต้องมีความเข้าใจที่เพียงพอเกี่ยวกับแอปพลิเคชันที่สำคัญนี้ หลายคนชอบใช้เครื่องมือระดับสูงเช่น Wireshark แต่ฉันคิดว่านี่เป็นความผิดพลาด

เมื่อคุณใช้เครื่องมือที่แสดงการรับส่งข้อมูลเครือข่ายในลักษณะที่เป็นธรรมชาติ (เรียบง่าย) มากขึ้น ความซับซ้อนของการวิเคราะห์จะตกอยู่ที่บุคคลโดยตรง ไม่ใช่แอปพลิเคชัน วิธีนี้ช่วยพัฒนาความเข้าใจในชุด TCP/IP ซึ่งเป็นเหตุผลที่ฉันขอแนะนำให้ใช้ tcpdump แทนเครื่องมืออื่นๆ เมื่อทำได้

15:31:34.079416 IP (tos 0x0, ttl 64, id 20244, offset 0, flags , โปรโต: TCP(6), ความยาว: 60) source.35970 > dest.80: S, cksum 0x0ac1 (ถูกต้อง), 2647022145: 2647022145 (0) ชนะ 5840 0x0000: 4500 003c 4f14 4006 7417 0AFB 0257 E .. 0x0010: 4815 222A 8C82 00550 5A41 0000 0000 H. "*... ​​​​P..za .... 0x002 16D0 0AC1 0000 0204 0204 05b4 0402 080a ................ 0x0030: 14b4 1555 0000 0000 0103 0302

พื้นฐาน

ด้านล่างนี้คือตัวเลือกบางส่วนที่คุณสามารถใช้ได้เมื่อกำหนดค่า tcpdump ง่ายต่อการลืมและ/หรือสับสนกับตัวกรองประเภทอื่นๆ เช่น Wireshark ดังนั้นหน้านี้จึงสามารถใช้เป็นข้อมูลอ้างอิงได้ ต่อไปนี้คือรายการหลักที่ตัวฉันเองชอบจำไว้ ทั้งนี้ขึ้นอยู่กับสิ่งที่ฉันดู

ตัวเลือก

  • -i any: ฟังบนอินเทอร์เฟซทั้งหมดเพื่อดูว่าคุณเห็นทราฟฟิกหรือไม่
  • -i eth0: ฟังบนอินเทอร์เฟซ eth0
  • -D: แสดงรายการอินเทอร์เฟซที่ใช้ได้
  • -n: แสดงที่อยู่ IP แทนชื่อโฮสต์
  • -nn: แสดงที่อยู่ IP และหมายเลขพอร์ตแทนชื่อโฮสต์และชื่อโปรโตคอล
  • -q: แสดงจำนวนข้อมูลขั้นต่ำเกี่ยวกับแพ็คเกจ
  • -t: อย่าแสดงการประทับเวลาในทุกบรรทัด
  • -tttt: ระบุว่าการประทับเวลาจะถูกส่งออกในรูปแบบเริ่มต้นสำหรับแต่ละบรรทัด
  • -X: แสดงเนื้อหาแพ็คเกจทั้งในรูปแบบฐานสิบหกและ ASCII
  • -XX: เหมือนกับ -X แต่ยังแสดงส่วนหัวของอีเธอร์เน็ตด้วย
  • -v, -vv, -vvv : เพิ่มจำนวนของข้อมูลแพ็คเกจที่ส่งคืน
  • -c: รับเฉพาะจำนวน x ของแพ็กเก็ตแล้วหยุด
  • -s: ระบุความยาวสแน็ปอิน (ขนาด) ของการจับภาพเป็นไบต์ ใช้ -s0 เพื่อรับทุกอย่าง เว้นแต่คุณจะตั้งใจคว้าให้น้อยลง
  • -S: พิมพ์หมายเลขลำดับแบบสัมบูรณ์
  • -e: รับส่วนหัวอีเธอร์เน็ต
  • -q: แสดงข้อมูลแพ็คเกจขั้นต่ำ
  • -E: ถอดรหัสการรับส่งข้อมูล IPSEC โดยระบุคีย์การเข้ารหัส
[ค่า snaplength ซึ่งเป็นค่าเริ่มต้นสำหรับ tcpdump 4.0 ได้เปลี่ยนจาก 68 ไบต์เป็น 96 ไบต์ แม้ว่าข้อมูลนี้จะให้ข้อมูลเพิ่มเติมเกี่ยวกับแพ็คเกจแก่คุณ แต่ก็ไม่ใช่ข้อมูลทั้งหมด ใช้ -s1514 หรือ -s0 เพื่อรับความคุ้มครองทั้งหมด]

การแสดงออก

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

นิพจน์มีสามประเภทหลัก: type, dir และ proto

ประเภทตัวเลือก: โฮสต์ เครือข่าย และพอร์ต

ไดเร็กทอรีช่วยให้คุณสามารถทำ src, dst และการรวมกันของสิ่งเหล่านี้

โปรโตคอลช่วยให้คุณกำหนด: tcp, udp, icmp, ah และอื่นๆ อีกมากมาย

ตัวอย่าง

ตอนนี้เราได้เห็นตัวเลือกที่เรามีแล้ว มาดูตัวอย่างการใช้งานจริงที่เราน่าจะเห็นในการทำงานประจำวันของเรากัน

ข้อความหลัก

เพียงแค่ดูว่าเกิดอะไรขึ้นโดยดูที่อินเทอร์เฟซทั้งหมด

# tcpdump - ฉันใด

อินเทอร์เฟซเฉพาะ

มุมมองพื้นฐานของสิ่งที่เกิดขึ้นบนอินเทอร์เฟซเฉพาะ

# tcpdump -i eth0

การนำเสนอ RAW OUTPUT

เอาต์พุตแบบละเอียดโดยไม่ต้องแก้ไขชื่อโฮสต์หรือหมายเลขพอร์ต หมายเลขลำดับที่แน่นอน และการประทับเวลาที่มนุษย์อ่านได้

# tcpdump -ttttnnvvS

ค้นหาการจราจรตาม IP

หนึ่งในข้อความค้นหาที่พบบ่อยที่สุด ซึ่งจะแสดงให้คุณเห็นการเข้าชมจาก 1.2.3.4 ไม่ว่าจะเป็นต้นทางหรือปลายทาง

# โฮสต์ tcpdump 1.2.3.4

ดูข้อมูลเพิ่มเติมเกี่ยวกับแพ็คเกจ HEX

เอาต์พุตเลขฐานสิบหกมีประโยชน์เมื่อคุณต้องการดูเนื้อหาของแพ็คเกจที่เป็นปัญหา และมักใช้ดีที่สุดเมื่อคุณแยกตัวเลือกหลายตัวเพื่อการตรวจสอบอย่างละเอียดยิ่งขึ้น

# tcpdump -nnvXSs 0 -c1 icmp tcpdump: ฟังบน eth0, ประเภทลิงก์ EN10MB (Ethernet), 23:11:10.370321 IP (tos 0x20, ttl 48, id 34859, offset 0, flags , length: 84) 69.254.213.43 > 72.21.34.42: icmp 64: คำขอ echo seq 0 0x0000: 4520 0054 882b 0000 3001 7cf5 45fe d52b E..T.+..0.|.E..+ 0x0010: 4815 222a 0800 354 Hd 272a 000 ".. 50"..%..D 0x0020: ae5e 0500 0809 0a0b 0c0d 0e0f 1011 1213 .^............... 0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 ... .. ........!"# 0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&"()*+,-./0123 0x0050: 3435 3637 4567 1 แพ็กเก็ตที่ดักจับ 1 แพ็กเก็ตที่ได้รับจากตัวกรอง 0 แพ็กเก็ตที่ทิ้ง โดย kernel

การกรองตามแหล่งที่มาและปลายทาง

การแยกทราฟฟิกตามแหล่งที่มาหรือปลายทางทำได้ง่ายมากโดยใช้ src และ dst

# tcpdump src 2.3.4.5 tcpdump dst 3.4.5.6

ค้นหาแพ็คเกจผ่านเครือข่าย

หากต้องการค้นหาแพ็กเก็ตไปยังหรือจากเครือข่ายใดเครือข่ายหนึ่ง ให้ใช้ตัวเลือกเน็ต คุณสามารถรวมสิ่งนี้กับตัวเลือก src หรือ dst

# tcpdump สุทธิ 1.2.3.0/24

แสดงการจราจรที่เชื่อมโยงกับพอร์ตพิเศษ

คุณสามารถค้นหาพอร์ตการรับส่งข้อมูลเฉพาะได้โดยใช้ตัวเลือกพอร์ตตามด้วยหมายเลขพอร์ต

# พอร์ต tcpdump 3389 พอร์ต tcpdump src 1025

แสดงการจราจรของหนึ่งโปรโตคอล

หากคุณกำลังมองหาการรับส่งข้อมูลประเภทใดประเภทหนึ่ง คุณสามารถใช้ tcp, udp, icmp และอื่นๆ อีกมากมาย

#tcpdump icmp

แสดงการจราจร IP6 เท่านั้น

คุณยังสามารถค้นหาการรับส่งข้อมูล IP6 ทั้งหมดโดยใช้ตัวเลือกโปรโตคอล

ค้นหาการจราจรโดยใช้ PORT BANDS

คุณยังสามารถใช้ช่วงพอร์ตเพื่อค้นหาการรับส่งข้อมูล

# tcpdump portrange 21-23

ค้นหาการจราจรตามขนาดบรรจุภัณฑ์

หากคุณกำลังมองหาแพ็คเกจที่มีขนาดเฉพาะ คุณสามารถใช้ตัวเลือกเหล่านี้ได้ คุณสามารถใช้ขนาดเล็ก ใหญ่ หรือสัญลักษณ์อะไรก็ได้ที่คุณคาดหวังจากคณิตศาสตร์

# tcpdump น้อยกว่า 32 tcpdump มากกว่า 64 tcpdump<= 128

บันทึกเป็นลายลักษณ์อักษรไปยังไฟล์

การบันทึกเอาต์พุตของแบตช์ลงในไฟล์มักจะเป็นประโยชน์สำหรับการวิเคราะห์ในภายหลัง ไฟล์เหล่านี้เรียกว่าไฟล์ PCAP (PEE-cap) และสามารถประมวลผลได้โดยแอปพลิเคชันต่างๆ หลายร้อยรายการ รวมถึงตัววิเคราะห์เครือข่าย ระบบตรวจจับการบุกรุก และแน่นอนว่า tcpdump เอง ที่นี่เรากำลังเขียนไฟล์ชื่อ capture_file โดยใช้สวิตช์ -w

# tcpdump พอร์ต 80 -w capture_file

กำลังอ่านไฟล์ PCAP

คุณสามารถอ่านไฟล์ PCAP ด้วยสวิตช์ -r โปรดทราบว่าคุณสามารถใช้คำสั่งปกติทั้งหมดใน tcpdump เมื่ออ่านในไฟล์ คุณถูกจำกัดด้วยความจริงที่ว่าคุณไม่สามารถจับภาพและประมวลผลบางอย่างที่ไม่มีอยู่ในไฟล์ได้

# tcpdump -r capture_file

ขั้นสูง

ตอนนี้เราได้เห็นสิ่งที่เราสามารถทำได้ด้วยตัวอย่างพื้นฐานแล้ว มาดูเนื้อหาขั้นสูงกันบ้าง

มันคือทั้งหมดที่เกี่ยวกับการรวมกัน

การทำให้สิ่งต่าง ๆ เหล่านี้มีเอกลักษณ์เฉพาะตัวนั้นทรงพลัง แต่ความมหัศจรรย์ที่แท้จริงของ tcpdump นั้นมาจากความสามารถในการรวมตัวเลือกต่างๆ ด้วยวิธีที่สร้างสรรค์เพื่อแยกสิ่งที่คุณต้องการอย่างแท้จริง มีสามวิธีในการสร้างชุดค่าผสม และหากคุณเคยเรียนการเขียนโปรแกรมเลย คุณจะคุ้นเคยเป็นอย่างดี

และ
และ หรือ &&

หรือ
หรือ หรือ ||

ยกเว้น
ไม่หรือ!

ต่อไปนี้คือตัวอย่างบางส่วนของคำสั่งรวม

จาก IP เฉพาะและกำหนดให้กับพอร์ตเฉพาะ

มาค้นหาทราฟฟิกทั้งหมดจาก 10.5.2.3 ไปยังโฮสต์ใด ๆ บนพอร์ต 3389

Tcpdump -nnvvS src 10.5.2.3 และพอร์ต dst 3389

จากเครือข่ายหนึ่งไปอีกเครือข่ายหนึ่ง

ลองดูทราฟฟิกทั้งหมดที่มาจาก 192.168.x.x และย้ายไปยังเครือข่าย 10.x หรือ 172.16.x.x และเราจะแสดงเอาต์พุตฐานสิบหกโดยไม่มีชื่อโฮสต์และรายละเอียดเพิ่มเติมหนึ่งระดับ

Tcpdump -nvX src net 192.168.0.0/16 และ dst net 10.0.0.0/8 หรือ 172.16.0.0/16

การจราจรที่ไม่ใช่ ICMP ไปยัง IP ที่เฉพาะเจาะจง

นี่จะแสดงให้เราเห็นการรับส่งข้อมูลทั้งหมดที่ไปที่ 192.168.0.2 ที่ไม่ใช่ ICMP

tcpdump dst 192.168.0.2 และ src net ไม่ใช่ icmp

การจราจรจากโฮสต์ที่ไม่ได้อยู่ในพอร์ตเฉพาะ

นี่จะแสดงให้เราเห็นการรับส่งข้อมูลทั้งหมดจากโฮสต์ที่ไม่ใช่การรับส่งข้อมูล SSH (สมมติว่าใช้พอร์ตเริ่มต้น)

Tcpdump -vv src mars และไม่ใช่พอร์ต dst 22

อย่างที่คุณเห็น คุณสามารถสร้างการสืบค้นเพื่อค้นหาทุกสิ่งที่คุณต้องการ สิ่งสำคัญคือต้องกำหนดสิ่งที่คุณกำลังมองหาก่อน จากนั้นจึงสร้างไวยากรณ์เพื่อแยกประเภทการรับส่งข้อมูลเฉพาะ

การจัดกลุ่มที่ซับซ้อนและอักขระพิเศษ

พึงระลึกไว้เสมอว่าเมื่อสร้างการสืบค้นข้อมูลที่ซับซ้อน คุณอาจต้องจัดกลุ่มพารามิเตอร์ของคุณโดยใช้เครื่องหมายคำพูดเดี่ยว อัญประกาศเดี่ยวใช้เพื่อบอกให้ tcpdump ละเว้นอักขระพิเศษบางตัว - ในกรณีนี้ ตัวที่อยู่ในวงเล็บ "()" สามารถใช้วิธีการเดียวกันนี้เพื่อจัดกลุ่มโดยใช้นิพจน์อื่นๆ เช่น โฮสต์ พอร์ต เครือข่าย เป็นต้น ดูคำสั่งด้านล่าง

# การรับส่งข้อมูลที่มาจาก 10.0.2.4 และกำหนดไว้สำหรับพอร์ต 3389 หรือ 22 (ผิด) tcpdump src 10.0.2.4 และ (dst port 3389 หรือ 22)

หากคุณพยายามเรียกใช้คำสั่งที่มีประโยชน์นี้ในโอกาสอื่น คุณจะได้รับข้อผิดพลาดในวงเล็บ คุณสามารถแก้ไขได้โดยเว้นวงเล็บ (โดยนำหน้าแต่ละรายการด้วย \) หรือโดยใส่คำสั่งทั้งหมดไว้ในเครื่องหมายคำพูดเดียว:

# ปริมาณการใช้งานที่มาจาก 10.0.2.4 และปลายทางสำหรับพอร์ต 3389 หรือ 22 (ถูกต้อง) # tcpdump "src 10.0.2.4 และ (dst port 3389 หรือ 22)"

แยกแฟล็ก TCP เฉพาะ

คุณยังสามารถบันทึกการรับส่งข้อมูลตามการตั้งค่าสถานะ TCP บางอย่างได้

[หมายเหตุ: ตัวกรองด้านล่างค้นหาแพ็กเก็ตต่างๆ เหล่านี้เนื่องจาก tcp แจ้งออฟเซ็ต 13 ในส่วนหัว TCP ตัวเลขแสดงถึงตำแหน่งในหน่วยไบต์ เอ๊ะ! = 0 หมายความว่าแฟล็กนี้ถูกตั้งค่าเป็น 1 เช่น มันเปิดอยู่ ]

แสดงแพ็คเกจ URGENT (URG) ทั้งหมด...

# tcpdump "tcp & 32!=0"

แสดงแพ็คเกจ ACKNOWLEDGE ทั้งหมด (ACK) …

# tcpdump "tcp & 16!=0"

แสดงแพ็คเกจ PUSH ทั้งหมด (PSH) …

# tcpdump "tcp & 8!=0"

แสดงแพ็กเก็ต RESET ทั้งหมด (RST) ...

# tcpdump "tcp & 4!=0"

แสดงแพ็คเกจ SYNCHRONIZE ทั้งหมด (SYN) ...

# tcpdump "tcp & 2!=0"

แสดงแพ็คเกจ FINISH (FIN) ทั้งหมด...

# tcpdump "tcp & 1!=0"

แสดงแพ็คเกจ SYNCHRONIZE / ACKNOWLEDGE ทั้งหมด (SYNACK) …

# tcpdump "tcp=18" [หมายเหตุ: เฉพาะแฟล็ก PSH, RST, SYN และ FIN เท่านั้นที่แสดงในเอาต์พุตของฟิลด์ tcpdump URG และ ACK จะแสดงขึ้น แต่จะแสดงที่อื่นในเอาต์พุตมากกว่าในฟิลด์แฟล็ก ]

อย่างไรก็ตาม เช่นเดียวกับเครื่องมือที่ทรงพลังที่สุด มีหลายวิธีในการทำสิ่งที่คุณต้องการ ตัวอย่างต่อไปนี้แสดงวิธีอื่นในการดักจับแพ็กเก็ตด้วยชุดแฟล็ก TCP เฉพาะ

# tcpdump "tcp == tcp-syn"

ลบแฟล็ก RST ด้วยตัวเลือก tcpflags...

# tcpdump "tcp == tcp-rst"

ลบแฟล็ก FIN ด้วย tcpflags...

# tcpdump "tcp == tcp-fin" [หมายเหตุ: วิธีเดียวกันนี้สามารถใช้กับแฟล็กอื่นได้ พวกเขาได้รับการละเว้นเพื่อประโยชน์ในการประหยัดพื้นที่ ]

การระบุการเข้าชมที่น่าสังเกต

สุดท้าย มีสูตรด่วนสองสามสูตรที่คุณควรจำไว้เพื่อตรวจจับทราฟฟิกเฉพาะและเฉพาะ เช่น แพ็กเก็ตที่ไม่ดี/อาจเป็นอันตราย

แพ็คเกจที่มี RST และ SYN ปกติ (ไม่ควรจะเป็น)

# tcpdump "tcp=6"

ค้นหา HTTP PLAIN TEXT และรับคำขอ

# tcpdump "tcp = 0x47455420"

ค้นหาการเชื่อมต่อ SSH บนพอร์ตใดก็ได้ (ผ่านแบนเนอร์)

# tcpdump "tcp[(tcp>>2):4] = 0x5353482D"

แพ็กเก็ตที่มี TTL น้อยกว่า 10 (โดยทั่วไปจะแสดงปัญหาหรือใช้ TRACEROUTE)

# tcpdump "ip< 10"

แพ็คเกจชั่วร้าย

# tcpdump "ip & 128 != 0"

บทสรุป

tcpdump เป็นเครื่องมือที่มีค่าสำหรับทุกคนที่ต้องการเข้าสู่เครือข่ายหรือความปลอดภัยของข้อมูล
วิธีที่ผิดปกติในการโต้ตอบกับการรับส่งข้อมูล บวกกับความถูกต้องของการตรวจสอบแพ็คเก็ต ทำให้เป็นเครื่องมือที่ดีที่สุดสำหรับการเรียนรู้เกี่ยวกับ TCP/IP
ตัววิเคราะห์โปรโตคอลอย่าง Wireshark นั้นยอดเยี่ยม แต่ถ้าคุณต้องการควบคุมแพ็กเก็ตจริงๆ คุณต้องเชี่ยวชาญ tcpdump ก่อน
โดยรวมแล้ว บทช่วยสอนนี้จะช่วยให้คุณแข็งแกร่งขึ้น แต่หน้าคู่มือควรมีประโยชน์เสมอสำหรับกรณีการใช้งานขั้นสูงและแบบใช้ครั้งเดียว เราหวังเป็นอย่างยิ่งว่าจะเป็นประโยชน์กับคุณ และโปรดติดต่อฉันหากคุณมีคำถามใดๆ

  • เรานำเสนอโปรแกรมและบทช่วยสอนที่ผ่านการพิสูจน์แล้วจากผู้เชี่ยวชาญจาก Cisco Networking Academy และ Linux Professional Institute ผู้สอนที่ผ่านการรับรอง และครูสอนพิเศษส่วนตัว
  • เราจะช่วยในเรื่องการจ้างงานและประกอบอาชีพ 100% ของผู้สำเร็จการศึกษาของเรามีงานทำ
  • การอบรมเป็นอย่างไรบ้าง?

    • เราจัดบรรยายออนไลน์ตอนเย็นบนแพลตฟอร์มของเราหรือเรียนเต็มเวลาบนพื้นฐานของสำนักงาน Kyiv
    • เราจะถามคุณเกี่ยวกับเวลาที่สะดวกในการฝึกและปรับเปลี่ยน เราเข้าใจดีว่าไม่มีเวลาเรียนเพียงพอ
    • หากคุณต้องการตารางเวลาส่วนบุคคล เราจะหารือและดำเนินการตามนั้น
    • เราจะกำหนดเส้นตายที่ชัดเจนสำหรับการจัดระเบียบตนเอง ภัณฑารักษ์ส่วนตัวจะติดต่อกลับไปเพื่อตอบคำถาม ให้คำแนะนำ และกระตุ้นให้คุณปฏิบัติตามเส้นตายในการสอบผ่าน

    เราจะช่วยคุณ: