คอมพิวเตอร์และอุปกรณ์ทันสมัย

ข้อมูล (ENG):
SmartSniff เป็นยูทิลิตี้การตรวจสอบเครือข่ายที่ช่วยให้คุณสามารถจับแพ็กเก็ต TCP/IP ที่ผ่านอะแดปเตอร์เครือข่ายของคุณ และดูข้อมูลที่บันทึกเป็นลำดับการสนทนาระหว่างไคลเอนต์และเซิร์ฟเวอร์ คุณสามารถดูการสนทนา TCP/IP ในโหมด Ascii (สำหรับโปรโตคอลแบบข้อความ เช่น HTTP, SMTP, POP3 และ FTP) หรือเป็นการถ่ายโอนข้อมูลฐานสิบหก (สำหรับโปรโตคอลพื้นฐานที่ไม่ใช่ข้อความ เช่น DNS)
SmartSniff มี 3 วิธีในการจับแพ็กเก็ต TCP/IP:
Raw Sockets (เฉพาะ Windows 2000/XP หรือสูงกว่า): ช่วยให้คุณสามารถจับแพ็กเก็ต TCP/IP บนเครือข่ายของคุณโดยไม่ต้องติดตั้งไดรเวอร์การจับภาพ วิธีการนี้มีข้อจำกัดและปัญหาบางประการ
WinPcap Capture Driver: ช่วยให้คุณสามารถจับแพ็กเก็ต TCP/IP บนระบบปฏิบัติการ Windows ทั้งหมด (Windows 98/ME/NT/2000/XP/2003/Vista) เพื่อใช้งาน คุณต้องดาวน์โหลดและติดตั้ง WinPcap Capture Driver จากเว็บไซต์นี้ (WinPcap เป็นไดรเวอร์จับภาพโอเพ่นซอร์สฟรี)
โดยทั่วไปวิธีนี้เป็นวิธีที่แนะนำในการจับแพ็กเก็ต TCP/IP ด้วย SmartSniff และทำงานได้ดีกว่าวิธี Raw Sockets
Microsoft Network Monitor Driver (สำหรับ Windows 2000/XP/2003 เท่านั้น): Microsoft มีไดรเวอร์จับภาพฟรีสำหรับ Windows 2000/XP/2003 ที่ SmartSniff สามารถใช้ได้ แต่ไดรเวอร์นี้ไม่ได้ติดตั้งตามค่าเริ่มต้น และคุณต้องติดตั้งด้วยตนเอง โดยใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้:
ตัวเลือกที่ 1: ติดตั้งจากซีดีรอมของ Windows 2000/XP ตามคำแนะนำในเว็บไซต์ Microsoft
ตัวเลือก 2 (XP เท่านั้น): ดาวน์โหลดและติดตั้งเครื่องมือสนับสนุน Windows XP Service Pack 2 หนึ่งในเครื่องมือในแพ็คเกจนี้คือ netcap.exe เมื่อคุณเรียกใช้เครื่องมือนี้ในครั้งแรก Network Monitor Driver จะถูกติดตั้งในระบบของคุณโดยอัตโนมัติ
Microsoft Network Monitor Driver 3: Microsoft มีไดรเวอร์ Microsoft Network Monitor (3.x) เวอร์ชันใหม่ที่รองรับ Windows 7/Vista/2008 เช่นกัน ตั้งแต่เวอร์ชัน 1.60 เป็นต้นไป SmartSniff สามารถใช้ไดรเวอร์นี้เพื่อบันทึกการรับส่งข้อมูลเครือข่าย
Microsoft Network Monitor (3.x) เวอร์ชันใหม่พร้อมให้ดาวน์โหลดจากเว็บไซต์ Microsoft

ความต้องการของระบบ
SmartSniff สามารถจับแพ็กเก็ต TCP/IP บนระบบปฏิบัติการ Windows เวอร์ชันใดก็ได้ (Windows 98/ME/NT/2000/XP/2003/2008/Vista/7/8) ตราบใดที่ไดรเวอร์จับภาพ WinPcap ได้รับการติดตั้งและทำงานอย่างถูกต้องกับเครือข่ายของคุณ อะแดปเตอร์

คุณยังสามารถใช้ SmartSniff กับไดรเวอร์จับภาพของ Microsoft Network Monitor ได้ หากติดตั้งไว้ในระบบของคุณ
ภายใต้ Windows 2000/XP (หรือสูงกว่า) SmartSniff ยังช่วยให้คุณจับแพ็กเก็ต TCP/IP โดยไม่ต้องติดตั้งไดรเวอร์การจับภาพใดๆ โดยใช้วิธี 'Raw Sockets' อย่างไรก็ตาม วิธีการจับภาพนี้มีข้อจำกัดและปัญหาบางประการ:
* แพ็กเก็ต UDP และ ICMP ขาออกจะไม่ถูกบันทึก
* ใน Windows XP SP1 แพ็กเก็ตขาออกจะไม่ถูกบันทึกเลย - ต้องขอบคุณจุดบกพร่องของ Microsoft ที่ปรากฏในการอัปเดต SP1... จุดบกพร่องนี้ได้รับการแก้ไขแล้วในการอัปเดต SP2 แต่ภายใต้ Vista นั้น Microsoft จะส่งคืนจุดบกพร่องของแพ็กเก็ตขาออกของ XP/SP1 กลับคืนมา
* บน Windows Vista/7/8: โปรดทราบว่าวิธี Raw Sockets ทำงานไม่ถูกต้องในทุกระบบ ไม่ใช่จุดบกพร่องใน SmartSniff แต่เป็นใน API ของระบบปฏิบัติการ Windows หากคุณเห็นเฉพาะการรับส่งข้อมูลขาออก ให้ลองปิดไฟร์วอลล์ Windows หรือเพิ่ม smsniff.exe ในรายการโปรแกรมที่อนุญาตของไฟร์วอลล์ Windows

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

นักดมกลิ่นมาจากไหน?

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

จะจดจำผู้ดมกลิ่นได้อย่างไร?

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

วิธีกำจัดดมกลิ่น

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

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

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

โปรแกรม Wireshark จะเป็นผู้ช่วยที่ยอดเยี่ยมสำหรับผู้ใช้ที่ต้องการวิเคราะห์แพ็คเก็ตเครือข่ายโดยละเอียด - การรับส่งข้อมูลเครือข่ายคอมพิวเตอร์ นักดมกลิ่นโต้ตอบกับโปรโตคอลทั่วไปเช่น netbios, fddi, nntp, icq, x25, dns, irc, nfs, http, tcp, ipv6และอื่น ๆ อีกมากมาย. ในระหว่างการวิเคราะห์ จะช่วยให้คุณสามารถแยกแพ็กเก็ตเครือข่ายออกเป็นส่วนประกอบที่เหมาะสมตามโปรโตคอลเฉพาะ และแสดงข้อมูลที่อ่านได้ในรูปแบบตัวเลขบนหน้าจอ
รองรับข้อมูลที่ส่งและรับรูปแบบต่าง ๆ จำนวนมากและสามารถเปิดไฟล์ที่ยูทิลิตี้อื่นใช้ หลักการทำงานคือการ์ดเครือข่ายจะเข้าสู่โหมดการออกอากาศและเริ่มดักจับแพ็กเก็ตเครือข่ายที่อยู่ในช่วงการมองเห็น สามารถทำงานเป็นโปรแกรมดักจับแพ็กเก็ต wifi ได้

วิธีการใช้งาน Wireshark

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

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

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

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

นอกจากนี้ยังมีเวอร์ชันสำหรับระบบ Linux

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

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


ในบทความนี้เราจะดูที่การสร้างดมกลิ่นอย่างง่ายสำหรับ Windows OS
ใครสนใจยินดีต้อนรับสู่แมวครับ

การแนะนำ

เป้า:เขียนโปรแกรมที่จะจับการรับส่งข้อมูลเครือข่าย (Ethernet, WiFi) ที่ส่งผ่านโปรโตคอล IP
สิ่งอำนวยความสะดวก: Visual Studio 2005 หรือสูงกว่า
แนวทางที่อธิบายไว้ในที่นี้ไม่ได้เป็นของผู้เขียนเป็นการส่วนตัว และนำไปใช้อย่างประสบความสำเร็จในเชิงพาณิชย์หลายรายการ รวมถึงโปรแกรมฟรีโดยสมบูรณ์ (สวัสดี GPL)
งานนี้มีไว้สำหรับผู้เริ่มต้นในการเขียนโปรแกรมเครือข่ายเป็นหลัก ซึ่งมีความรู้พื้นฐานอย่างน้อยในด้านซ็อกเก็ตโดยทั่วไป และโดยเฉพาะซ็อกเก็ต Windows ที่นี่ฉันมักจะเขียนเรื่องที่มีชื่อเสียงเพราะหัวข้อนั้นเฉพาะเจาะจงถ้าฉันพลาดอะไรไปหัวของฉันจะยุ่งเหยิง

ฉันหวังว่าคุณจะพบว่ามันน่าสนใจ

ทฤษฎี (ไม่จำเป็นต้องอ่าน แต่แนะนำ)

ในขณะนี้ เครือข่ายข้อมูลสมัยใหม่ส่วนใหญ่มีพื้นฐานอยู่บนพื้นฐานของสแต็กโปรโตคอล TCP/IP สแต็กโปรโตคอล TCP/IP (Transmission Control Protocol/Internet Protocol) เป็นชื่อรวมสำหรับโปรโตคอลเครือข่ายระดับต่างๆ ที่ใช้ในเครือข่าย ในบทความนี้เราจะสนใจโปรโตคอล IP เป็นหลักซึ่งเป็นโปรโตคอลเครือข่ายที่กำหนดเส้นทางที่ใช้สำหรับการส่งข้อมูลที่ไม่รับประกันซึ่งแบ่งออกเป็นแพ็กเก็ตที่เรียกว่า (คำที่ถูกต้องกว่าคือดาตาแกรม) จากโหนดเครือข่ายหนึ่งไปยังอีกโหนดหนึ่ง
สิ่งที่น่าสนใจเป็นพิเศษสำหรับเราคือแพ็กเก็ต IP ที่ออกแบบมาเพื่อส่งข้อมูล นี่เป็นระดับที่ค่อนข้างสูงของโมเดลข้อมูลเครือข่าย OSI เมื่อคุณสามารถแยกตัวเองออกจากอุปกรณ์และสื่อการรับส่งข้อมูล โดยจะทำงานเฉพาะกับการแสดงเชิงตรรกะเท่านั้น
มีเหตุผลอย่างยิ่งที่เครื่องมือในการสกัดกั้นการตรวจสอบบันทึกและวิเคราะห์การรับส่งข้อมูลเครือข่ายควรปรากฏขึ้นไม่ช้าก็เร็ว เครื่องมือดังกล่าวมักเรียกว่าตัววิเคราะห์การรับส่งข้อมูลตัววิเคราะห์แพ็กเก็ตหรือดมกลิ่น (จากภาษาอังกฤษเป็นดม - ดม) นี่คือตัววิเคราะห์การรับส่งข้อมูลเครือข่าย โปรแกรมหรืออุปกรณ์ซอฟต์แวร์ฮาร์ดแวร์ที่ออกแบบมาเพื่อดักจับและวิเคราะห์ในภายหลัง หรือวิเคราะห์เฉพาะการรับส่งข้อมูลเครือข่ายที่มีไว้สำหรับโหนดอื่น

การปฏิบัติ (การสนทนาที่สำคัญ)

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

เหตุใดจึงจำเป็น:

  1. ดูกระแสการรับส่งข้อมูลปัจจุบันผ่านการเชื่อมต่อเครือข่าย (ขาเข้า/ขาออก/ทั้งหมด)
  2. เปลี่ยนเส้นทางการรับส่งข้อมูลเพื่อการวิเคราะห์ในภายหลังไปยังโฮสต์อื่น
  3. ตามทฤษฎี คุณสามารถลองใช้มันเพื่อแฮ็กเครือข่าย WiFi ได้ (เราจะไม่ทำเช่นนั้นใช่ไหม)
ต่างจาก Wireshark ซึ่งใช้ไลบรารี libpcap/WinPcap ตัววิเคราะห์ของเราจะไม่ใช้ไดรเวอร์นี้ ยิ่งไปกว่านั้น เราจะไม่มีไดรเวอร์เลย และเราจะไม่เขียน NDIS ของเราเอง (โอ้ น่ากลัวมาก!) คุณสามารถอ่านเกี่ยวกับเรื่องนี้ได้ในหัวข้อนี้ เขาจะเป็นเพียงผู้สังเกตการณ์เฉยๆ โดยใช้ เท่านั้นไลบรารี WinSock การใช้ไดรเวอร์ในกรณีนี้ถือเป็นเรื่องซ้ำซ้อน

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

เริ่มต้นด้วย Windows 2000 (NT 5.0) การสร้างโปรแกรมเพื่อฟังส่วนเครือข่ายกลายเป็นเรื่องง่ายมากเพราะ ไดรเวอร์เครือข่ายช่วยให้คุณสามารถตั้งค่าซ็อกเก็ตเพื่อรับแพ็กเก็ตทั้งหมดได้

การเปิดใช้งานโหมด Promiscuous
ธงยาว = 1; ซ็อกเก็ต ซ็อกเก็ต; #define SIO_RCVALL 0x98000001 ioctlsocket (ซ็อกเก็ต, SIO_RCVALL, & RS_Flag);
โปรแกรมของเราทำงานบนแพ็กเก็ต IP และใช้ไลบรารี Windows Sockets เวอร์ชัน 2.2 และซ็อกเก็ตดิบ เพื่อให้สามารถเข้าถึงแพ็กเก็ต IP ได้โดยตรง จะต้องสร้างซ็อกเก็ตดังนี้:
การสร้างซ็อกเก็ตดิบ
s = ซ็อกเก็ต (AF_INET, SOCK_RAW, IPPROTO_IP);
ที่นี่แทนที่จะเป็นค่าคงที่ SOCK_สตรีม(โปรโตคอล TCP) หรือ SOCK_DGRAM(โปรโตคอล UDP) เราใช้ค่า SOCK_RAW. โดยทั่วไปแล้วการทำงานกับซ็อกเก็ตดิบนั้นน่าสนใจไม่เพียงแต่จากมุมมองของการจับปริมาณข้อมูลเท่านั้น ในความเป็นจริง เราได้รับการควบคุมการก่อตัวของแพ็คเกจอย่างสมบูรณ์ หรือมากกว่านั้น เราสร้างมันขึ้นมาด้วยตนเอง ซึ่งอนุญาตให้ เช่น ส่งแพ็กเก็ต ICMP เฉพาะ...

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

คำอธิบายของโครงสร้างแพ็กเก็ต IP
typedef struct _IPHeader ( char ver_len ที่ไม่ได้ลงนาม; // เวอร์ชันส่วนหัวและความยาว char tos ที่ไม่ได้ลงนาม; // ประเภทบริการ ความยาวสั้นที่ไม่ได้ลงนาม // ความยาวของแพ็กเก็ตทั้งหมด id สั้นที่ไม่ได้ลงนาม // Id สั้น flgs_offset ที่ไม่ได้ลงนาม; // แฟล็กและออฟเซ็ตที่ไม่ได้ลงนาม ถ่าน ttl ; // โปรโตคอลถ่านที่ไม่ได้ลงนามตลอดอายุการใช้งาน // โปรโตคอล xsum สั้นที่ไม่ได้ลงนาม; // เช็คซัม src แบบยาวที่ไม่ได้ลงนาม; // ที่อยู่ IP ของผู้ส่งปลายทางแบบยาวที่ไม่ได้ลงนาม; // ที่อยู่ IP ปลายทาง *พารามิเตอร์สั้นที่ไม่ได้ลงนาม; // พารามิเตอร์ (สูงสุด 320 บิต) ถ่าน *data ที่ไม่ได้ลงนาม // ข้อมูล (สูงสุด 65535 ออคเต็ต) )IPHeader;
ฟังก์ชันหลักของอัลกอริธึมการฟังจะมีลักษณะดังนี้:
ฟังก์ชั่นการจับแพ็คเก็ตเดี่ยว
IPHeader* RS_Sniff() ( IPHeader *hdr; int count = 0; count = recv(RS_SSocket, (char*)&RS_Buffer, sizeof(RS_Buffer), 0); if (นับ >= ขนาดของ(IPHeader)) ( hdr = (LPIPHeader )malloc(MAX_PACKET_SIZE); memcpy(hdr, RS_Buffer, MAX_PACKET_SIZE); RS_UpdateNetStat(count, hdr); ส่งคืน hdr; ) มิฉะนั้น ส่งคืน 0; )
ทุกอย่างเป็นเรื่องง่ายที่นี่: เราได้รับข้อมูลชิ้นหนึ่งโดยใช้ฟังก์ชันซ็อกเก็ตมาตรฐาน รายรับแล้วคัดลอกไปไว้ในโครงสร้างเช่น IPHeader.
และสุดท้าย เราก็เริ่มลูปการจับแพ็กเก็ตที่ไม่มีที่สิ้นสุด:
มาจับแพ็กเก็ตทั้งหมดที่มาถึงอินเทอร์เฟซเครือข่ายของเรา
ในขณะที่ (จริง) ( ​​IPHeader* hdr = RS_Sniff(); // ประมวลผลแพ็กเก็ต IP ถ้า (hdr) ( // พิมพ์ส่วนหัวในคอนโซล ) )
นอกเรื่องไปหน่อย
ที่นี่และด้านล่าง ผู้เขียนได้สร้างคำนำหน้า RS_ (จาก Raw Sockets) สำหรับฟังก์ชันและตัวแปรที่สำคัญบางอย่าง ฉันทำโปรเจ็กต์นี้เมื่อ 3-4 ปีที่แล้ว และฉันมีความคิดบ้าๆ ที่จะเขียนไลบรารี่ที่ครบครันสำหรับการทำงานกับซ็อกเก็ตดิบ ดังที่มักจะเกิดขึ้น หลังจากได้รับผลลัพธ์ที่สำคัญ (สำหรับผู้เขียน) ความกระตือรือร้นก็จางหายไป และเรื่องนี้ก็ไม่ได้ไปไกลกว่าตัวอย่างการฝึกอบรม

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

/* * การไฮไลท์แพ็คเกจด้วยสี */ void ColorPacket(const IPHeader *h, const u_long haddr, const u_long whost = 0) ( if (h->xsum) SetConsoleTextColor(0x17); // ถ้าแพ็คเกจไม่ว่างเปล่าอย่างอื่น SetConsoleTextColor(0x07) ; // แพ็คเกจว่าง if (haddr == h->src) ( SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_RED | FOREGROUND_INTENSITY); // แพ็คเกจ "native" สำหรับการส่งคืน ) else if (haddr == h->dest ) ( SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_GREEN | FOREGROUND_INTENSITY); // "native" รับแพ็กเก็ต ) ถ้า (h->protocol == PROT_ICMP || h->protocol == PROT_IGMP) ( SetConsoleTextColor (0x70) ; // แพ็กเก็ต ICMP ) else if(h->protocol == PROT_IP || h->protocol == 115) ( SetConsoleTextColor(0x4F); // แพ็กเก็ต IP-in-IP, L2TP ) อย่างอื่นถ้า (h -> โปรโตคอล == 53 || h->โปรโตคอล == 56) ( SetConsoleTextColor(0x4C); // TLS, IP พร้อมการเข้ารหัส ) if(whost == h->dest || whost == h->src) ( SetConsoleTextColor (0x0A); ) )

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

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

การแปลงส่วนหัว IP เป็นสตริง
อินไลน์ char* iph2str(IPHeader *iph) ( const int BUF_SIZE = 1024; char *r = (char*)malloc(BUF_SIZE); memset((void*)r, 0, BUF_SIZE); sprintf(r, "ver=% d hlen=%d tos=%d len=%d id=%d flags=0x%X offset=%d ttl=%dms prot=%d crc=0x%X src=%s ปลายทาง=%s", BYTE_H (iph->ver_len), BYTE_L(iph->ver_len)*4, iph->tos, ntohs(iph->ความยาว), ntohs(iph->id), IP_FLAGS(ntohs(iph->flgs_offset)), IP_OFFSET (ntohs(iph->flgs_offset)), iph->ttl, iph->โปรโตคอล, ntohs(iph->xsum), nethost2str(iph->src), nethost2str(iph->dest)); กลับ r; )
จากข้อมูลพื้นฐานที่ให้ไว้ข้างต้น เราได้รับโปรแกรมขนาดเล็กนี้ (ชื่อที่น่าขนลุก ss ย่อมาจาก sniffer ธรรมดา) ซึ่งใช้การฟังเฉพาะกับการรับส่งข้อมูล IP อินเทอร์เฟซของมันแสดงไว้ด้านล่างในรูป

ฉันให้ซอร์สและรหัสไบนารี่ตามที่เป็นอยู่เหมือนเมื่อหลายปีก่อน ตอนนี้ฉันกลัวที่จะดู แต่ก็ค่อนข้างอ่านง่าย (แน่นอน คุณไม่สามารถมั่นใจในตัวเองได้) แม้แต่ Visual Studio Express 2005 ก็เพียงพอสำหรับการรวบรวม

สิ่งที่เราลงเอยด้วย:

  • การดมกลิ่นทำงานในโหมดผู้ใช้ แต่ต้องใช้สิทธิ์ของผู้ดูแลระบบ
  • แพ็กเก็ตไม่ถูกกรองและแสดงตามที่เป็นอยู่ (คุณสามารถเพิ่มตัวกรองที่กำหนดเองได้ - ฉันขอแนะนำให้ดูรายละเอียดหัวข้อนี้ในบทความถัดไปหากคุณสนใจ)
  • การรับส่งข้อมูล WiFi ก็ถูกจับเช่นกัน (ทั้งหมดขึ้นอยู่กับรุ่นชิปเฉพาะ มันอาจไม่ทำงานสำหรับคุณเหมือนที่เคยทำกับฉันเมื่อหลายปีก่อน) แม้ว่าจะมี AirPcap ซึ่งสามารถทำได้อย่างมหัศจรรย์ แต่ต้องเสียเงิน
  • สตรีมดาตาแกรมทั้งหมดถูกบันทึกลงในไฟล์ (ดูไฟล์แนบที่แนบมาท้ายบทความ)
  • โปรแกรมทำงานเป็นเซิร์ฟเวอร์บนพอร์ต 2000 คุณสามารถเชื่อมต่อกับโฮสต์ได้โดยใช้ยูทิลิตี้ telnet และตรวจสอบกระแสการรับส่งข้อมูล จำนวนการเชื่อมต่อถูกจำกัดไว้ที่ยี่สิบ (รหัสไม่ใช่ของฉัน ฉันพบมันบนอินเทอร์เน็ตและใช้สำหรับการทดลอง ฉันไม่ได้ลบมัน - มันน่าเสียดาย)
ขอบคุณสำหรับความสนใจของคุณ ฉันขอแสดงความยินดีกับผู้อยู่อาศัยใน Khabrovsk และ Khabrovka และทุกคน สุขสันต์วันคริสต์มาส!

สมาร์ทสนิฟช่วยให้คุณสามารถสกัดกั้นการรับส่งข้อมูลเครือข่ายและแสดงเนื้อหาในรูปแบบ ASCII โปรแกรมจับแพ็กเก็ตที่ส่งผ่านอะแดปเตอร์เครือข่ายและแสดงเนื้อหาของแพ็กเก็ตในรูปแบบข้อความ (http, pop3, smtp, ftp protocols) และเป็นดัมพ์เลขฐานสิบหก ในการจับแพ็คเก็ต TCP/IP นั้น SmartSniff จะใช้เทคนิคต่อไปนี้: ซ็อกเก็ตดิบ - ซ็อกเก็ต RAW, ไดรเวอร์ WinCap Capture และไดรเวอร์ Microsoft Network Monitor โปรแกรมรองรับภาษารัสเซียและใช้งานง่าย

โปรแกรมดมกลิ่นสำหรับจับแพ็กเก็ต


SmartSniff แสดงข้อมูลต่อไปนี้: ชื่อโปรโตคอล ที่อยู่ภายในและระยะไกล พอร์ตภายในและระยะไกล โหนดภายใน ชื่อบริการ ปริมาณข้อมูล ขนาดทั้งหมด เวลาในการจับภาพและเวลาแพ็กเก็ตสุดท้าย ระยะเวลา ที่อยู่ MAC ภายในและระยะไกล ประเทศและแพ็กเก็ตข้อมูล เนื้อหา โปรแกรมมีการตั้งค่าที่ยืดหยุ่น โดยจะใช้ฟังก์ชันตัวกรองการจับภาพ การคลายการตอบสนอง http การแปลงที่อยู่ IP ยูทิลิตี้ย่อเล็กสุดลงในถาดระบบ SmartSniff สร้างรายงานเกี่ยวกับกระแสแพ็กเก็ตเป็นหน้า HTML โปรแกรมสามารถส่งออกสตรีม TCP/IP

หากคุณสังเกตเห็นข้อผิดพลาด ให้เลือกส่วนของข้อความแล้วกด Ctrl+Enter
แบ่งปัน:
คอมพิวเตอร์และอุปกรณ์ทันสมัย