Sharppcap
แพลตฟอร์มข้ามที่ได้รับการจัดการอย่างสมบูรณ์ (Windows, Mac, Linux) .NET Library สำหรับการจับแพ็กเก็ตจากอุปกรณ์ที่ใช้ชีวิตและไฟล์
พื้นที่เก็บข้อมูลอย่างเป็นทางการของ SharppCap
สารบัญ
- คุณสมบัติ
- ตัวอย่าง
- รายชื่ออุปกรณ์
- การจับแพ็คเก็ต
- การอ่านจากไฟล์จับภาพ
- เขียนไปยังไฟล์จับภาพ
- การสนับสนุน CI
- ปล่อย
- หมายเหตุเฉพาะแพลตฟอร์ม
- การโยกย้ายจาก 5.x ถึง 6.0
คุณสมบัติ
สำหรับการผ่าและการสร้างแพ็คเก็ตดู Packet.net
บน Linux การสนับสนุน libpcap
บน Windows รองรับ:
- ส่วนขยาย NPCAP (เดิมชื่อ WinPCAP) ดูคู่มือ NPCAP API
- Windiverert (https://www.reqrypt.org/windivert.html)
ในทุกแพลตฟอร์ม:
- รายการอุปกรณ์สด
- สถิติ
- การอ่านแพ็คเก็ตจากอุปกรณ์สด (อุปกรณ์เครือข่ายจริง) และอุปกรณ์ออฟไลน์ (จับไฟล์)
- รองรับตัวกรองแพ็คเก็ต Berkeley
- การทิ้งแพ็คเก็ตไปยังไฟล์ PCAP
- รูปแบบ pcap และ pcap-ng (เมื่อใช้ libpcap> = 1.1.0 หรือ npcap)
- Readonlyspan <> ใช้เพื่อหลีกเลี่ยงการจัดสรรหน่วยความจำและการคัดลอกภายใน SharppCap และให้ประสิทธิภาพที่ดีที่สุด
- มีวิธีการของผู้ช่วยในการแปลงเป็นอินสแตนซ์ของวัตถุหากต้องการที่จะยังคงมีแพ็กเก็ตที่จับได้ในหน่วยความจำ
การสนับสนุน Nativelibrary
- Capture Library Resolution ทำงานได้อย่างราบรื่นผ่าน Linux, OSX และ Windows
- โหลด libpcap บน linux อย่างหมดจดไม่ว่าจะเป็น distro มี symlink ถึง libpcap.so หรือไม่
.NET CORE 3 และ. NET Framework รองรับ
ตัวอย่าง
ดูโฟลเดอร์ตัวอย่างสำหรับช่วงของโครงการตัวอย่างเต็มรูปแบบโดยใช้ SharppCap
รายชื่ออุปกรณ์
var devices = CaptureDeviceList . Instance ;
foreach ( var dev in devices )
Console . WriteLine ( "{0} n " , dev . ToString ( ) ) ; การจับแพ็คเก็ต
void Device_OnPacketArrival ( object s , PacketCapture e )
{
Console . WriteLine ( e . GetPacket ( ) ) ;
}
using var device = LibPcapLiveDeviceList . Instance [ 0 ] ;
device . Open ( ) ;
device . OnPacketArrival += Device_OnPacketArrival ;
device . StartCapture ( ) ; การอ่านจากไฟล์จับภาพ
void Device_OnPacketArrival ( object s , PacketCapture e )
{
Console . WriteLine ( e . GetPacket ( ) ) ;
}
using var device = new CaptureFileReaderDevice ( "filename.pcap" ) ;
device . Open ( ) ;
device . OnPacketArrival += Device_OnPacketArrival ;
device . Capture ( ) ; เขียนไปยังไฟล์จับภาพ
using var device = new CaptureFileWriterDevice ( "somefilename.pcap" , System . IO . FileMode . Open ) ;
var bytes = new byte [ ] { 1 , 2 , 3 , 4 } ;
device . Write ( bytes ) ; การสนับสนุน CI
เรามีการสนับสนุนระบบ CI จำนวนหนึ่งด้วยเหตุผลบางประการ:
- ความหลากหลายของระบบ CI ในกรณีที่หนึ่งในนั้นปิดตัวลง
- ตัวอย่างในกรณีที่คุณต้องการปรับแต่ง SharPPCAP และใช้ประโยชน์จากระบบ CI ใดระบบหนึ่งสำหรับการสร้างภายใน โปรดทราบว่าเราถือว่าคุณกำลังติดตามใบอนุญาตสำหรับห้องสมุด
ปล่อย
SharppCap เปิดตัวผ่าน NuGet
หมายเหตุเฉพาะแพลตฟอร์ม
- OSX (อย่างน้อย ณ วันที่ 11.1) ขาด libpcap กับ pcap_open
ขอบคุณ
SharppCap เป็นที่ที่ทุกวันนี้เนื่องจากมีนักพัฒนาจำนวนมากที่ให้การปรับปรุงและแก้ไขและผู้ใช้ที่ให้ข้อเสนอแนะที่เป็นประโยชน์ผ่านปัญหาและคำขอคุณสมบัติ
เรารู้สึกซาบซึ้งเป็นพิเศษกับโครงการหลายโครงการที่เราสร้างขึ้น (เนื่องจาก SharppCap เป็น c# wrapper):
- libpcap - ขอบคุณมากที่ปล่อย 1.10
- NPCAP - สำหรับการสนับสนุนการจับแพ็คเก็ตต่อเนื่องบน Windows
การโยกย้ายจาก 5.x ถึง 6.0
เราหวังว่าคุณจะพบว่า 6.x API นั้นสะอาดและใช้งานง่ายขึ้น
6.0 นำการทำความสะอาดจำนวนมากที่ส่งผลให้เกิดการแตกหักของ API สำหรับผู้ใช้ 5.X
เพื่อช่วยในการย้ายถิ่นจาก 5.x ถึง 6.0 นี่คือรายการของการเปลี่ยนแปลงบางอย่างที่คุณต้องใช้ในการใช้งาน SharppCap ของคุณ
ตัวอย่างยังเป็นทรัพยากรที่ยอดเยี่ยมเนื่องจากพวกเขาแสดงตัวอย่างการทำงานโดยใช้ API ล่าสุด
- ข้อมูลแพ็คเก็ตจะถูกส่งกลับผ่าน PacketCapture ซึ่งใช้ประโยชน์จาก ReadOnlySpan <>
- การแปลงจาก ReadOnlySpan <> เป็น RawCapture ดำเนินการโดย packetCapture.getPacket ()
- สิ่งนี้หลีกเลี่ยงการจัดสรรหน่วยความจำระหว่างการจับแพ็คเก็ต
- โดยการหลีกเลี่ยงการจัดสรรหน่วยความจำและการคัดลอกหน่วยความจำประสิทธิภาพการจับภาพดิบอาจเร็วขึ้นถึง 30%
- SPAN เหมาะสำหรับการใช้งานกรณีที่แพ็คเก็ตถูกทิ้งลงในดิสก์สำหรับการประมวลผลในภายหลัง
- Nativelibrary ใช้สำหรับการปรับปรุงความละเอียดของไลบรารีการจับภาพ
- ปรับปรุงสถานการณ์ความละเอียดของไลบรารีบน linux distros ที่มี libpcap.so.xy symlink แต่ไม่มี libpcap.so symlink
- การสนับสนุนสำหรับ Mono DLLMAP ถูกลบออกเนื่องจากโมโนรองรับ nativelibrary ดู https://www.mono-project.com/news/2020/08/24/native-loader-net5/
- อุปกรณ์เป็น idisposable
- ลบการโทรเพื่อปิด ()
- สวิตช์ 'var device = xxx;' ถึง 'การใช้ device = xxx;'
- เปลี่ยนชื่อ OpenFlags -> DeviceModes
- วิธีการเปิด () ได้ถูกยุบเป็นวิธีที่น้อยลงด้วยตัวแปรเริ่มต้น
- DeviceMode ถูกแทนที่ด้วย devicemodes เนื่องจาก DeviceMode ไม่สามารถครอบคลุมการรวมกันทั้งหมดของวิธีที่คุณสามารถเปิดอุปกรณ์ได้
- npcapdevice -> libpcapplivedevice
- หากคุณใช้ NPCAPDevice คุณควรพิจารณาใช้ libpcappliveDevice NPCAP รุ่นล่าสุดมาพร้อมกับ LIBPCAP รุ่นใหม่ที่ให้ฟังก์ชั่นเกือบทั้งหมดของ API พื้นเมือง NPCAP
- ช่องว่างปัจจุบันที่นี่คือโหมดสถิติซึ่งปัจจุบันรองรับโดย NPCAP เท่านั้น
- มีการพูดคุยเกี่ยวกับ wrapper โหมดสถิติที่จะให้ฟังก์ชั่นที่คล้ายกันแม้ว่าจะไม่มีประสิทธิภาพในระดับเดียวกันราวกับว่ามันทำในเคอร์เนลหรือไดรเวอร์เช่นเดียวกับ Windows สำหรับระบบ libpcap
- WinPCAP เลิกใช้แล้ว
- เราขอแนะนำให้เปลี่ยนมาใช้ libpcappliveDevice
- การรับรองความถูกต้องจากระยะไกล
- หากคุณกำลังใช้การกำหนดค่าใหม่ฟังก์ชั่นบางอย่างถูกพับลงในคลาสนี้และ API เปลี่ยนไปเพื่อลบการใช้งานของ icredentialss และ networkcredentials