基本信息
源码名称:抓包 程序 实例源码下载
源码大小:0.74M
文件格式:.rar
开发语言:C#
更新时间:2014-07-11
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
WinPcap过滤表达式检验程序
WinPcap过滤表达式检验程序
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using PacketDotNet; using SharpPcap; using SharpPcap.AirPcap; using SharpPcap.LibPcap; using SharpPcap.WinPcap; namespace GetNetPackage { public partial class Form1 : Form { private delegate void _CrossSetDataTable(Int64 iSqe, DateTime dtTime, string sSource, ushort sSourcePort, string sDestination, ushort sDesPort, string sProtocol); bool isRun = false; ClsPackageCache clsPkgCache = new ClsPackageCache(); object objLock = new object(); Int64 iPackageCount; DataTable dtPackage = new DataTable(); struct StrPackage { public DateTime Time; //public string Source; //public string Destination; public ushort SourcePort; public ushort DesPort; public int Length; public Packet Packet; //public MyEthernetPacket ePacket; public MyIpPacket ipPacket; public MyTCPPacket tcpPacket; public MyUDPPacket udpPacket; public string Protocols; } Dictionary<Int64, StrPackage> lstPackage = new Dictionary<Int64, StrPackage>(); public Form1() { InitializeComponent(); dtPackage.Columns.Add("Sqe", typeof(Int64) ); dtPackage.Columns.Add("Time", typeof(DateTime)); dtPackage.Columns.Add("Source"); dtPackage.Columns.Add("SourcePort"); dtPackage.Columns.Add("Destination"); dtPackage.Columns.Add("DesPort"); dtPackage.Columns.Add("Protocol"); bdsPackage.DataSource = dtPackage; } private void CrossSetDataTable(Int64 iSqe, DateTime dtTime, string sSource, ushort sSourcePort, string sDestination, ushort sDesPort, string sProtocol) { _CrossSetDataTable SetText = delegate(Int64 Sqe, DateTime Time, string Source, ushort SourcePort, string Destination, ushort DesPort, string Protocol) { this.dtPackage.Rows.Add(new object[] { Sqe, Time, Source, SourcePort, Destination, DesPort, Protocol }); }; this.Invoke(SetText, new object[] { iSqe, dtTime, sSource, sSourcePort, sDestination, sDesPort, sProtocol }); } private void Ini() { iPackageCount = 0; lstPackage.Clear(); dtPackage.Rows.Clear(); txtPackageData.Text = string.Empty; hexEditor1.LoadFromFile(new byte[0]); dgvPackage.Sort(Column1, ListSortDirection.Descending); } private void EnableControl(bool state) { tscbxDeviceLst.Enabled = !isRun; tsbtnOpen.Enabled = !isRun; tstxtFilter.Enabled = !isRun; tsbtnClose.Enabled = isRun; } void PackageAna() { RawCapture rawCapture = clsPkgCache.GetAndRemoveFrist(); if (rawCapture == null) return; iPackageCount ; StrPackage strPackage = new StrPackage(); strPackage.Time = rawCapture.Timeval.Date.ToLocalTime(); strPackage.Length = rawCapture.Data.Length; PacketDotNet.Packet tempPacket = PacketDotNet.Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data); strPackage.Packet = tempPacket; //PacketDotNet.EthernetPacket ePacket = (PacketDotNet.EthernetPacket)PacketDotNet.EthernetPacket.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data); //if (ePacket != null) //{ // strPackage.ePacket = new MyEthernetPacket(ePacket); // strPackage.Protocols = ePacket.Type.ToString() "| "; // //CrossSetDataTable(iPackageCount, strPackage.Time, ePacket.SourceHwAddress.ToString(), ePacket.DestinationHwAddress.ToString(), ePacket.Type.ToString()); //} IpPacket ipPack = PacketDotNet.IpPacket.GetEncapsulated(tempPacket); if (ipPack != null) { strPackage.Protocols = ipPack.Protocol.ToString() "| "; strPackage.ipPacket = new MyIpPacket(ipPack); if (ipPack.Protocol.ToString() == "TCP") { PacketDotNet.TcpPacket tcppacket = TcpPacket.GetEncapsulated(tempPacket); if (tcppacket != null) { strPackage.tcpPacket = new MyTCPPacket(tcppacket); strPackage.SourcePort = tcppacket.SourcePort; // 80, 8080, 3128: Http; 21: FTP; 25: SMTP; 110: POP3 strPackage.DesPort = tcppacket.DestinationPort; } } else if (ipPack.Protocol.ToString() == "UDP") { PacketDotNet.UdpPacket udppacket = UdpPacket.GetEncapsulated(tempPacket); if (udppacket != null) { strPackage.udpPacket = new MyUDPPacket(udppacket); strPackage.SourcePort = udppacket.SourcePort; // 53: DNS strPackage.DesPort = udppacket.DestinationPort; } } CrossSetDataTable(iPackageCount, strPackage.Time, ipPack.SourceAddress.ToString(), strPackage.SourcePort, ipPack.DestinationAddress.ToString(), strPackage.DesPort, ipPack.Protocol.ToString()); lstPackage.Add(iPackageCount, strPackage); } } private void Form1_Load(object sender, EventArgs e) { tscbxDeviceLst.ComboBox.DisplayMember = "Text"; tscbxDeviceLst.ComboBox.ValueMember = "Value"; CaptureDeviceList deviceLst = CaptureDeviceList.Instance; foreach (ICaptureDevice dev in deviceLst) { if (dev is AirPcapDevice) { Console.WriteLine(dev.ToString()); } else if (dev is WinPcapDevice) { ClsComboboxItem clsCbxItem = new ClsComboboxItem(); clsCbxItem.Text = ((WinPcapDevice)dev).Interface.FriendlyName " " dev.Description.Split('\'')[1]; clsCbxItem.Value = dev; tscbxDeviceLst.ComboBox.Items.Add(clsCbxItem); } else if (dev is LibPcapLiveDevice) { Console.WriteLine(dev.ToString()); } } } private void tsbtnOpen_Click(object sender, EventArgs e) { if (tscbxDeviceLst.SelectedItem != null) { // 历史记录初始化 Ini(); ICaptureDevice Dev = ((ClsComboboxItem)tscbxDeviceLst.SelectedItem).Value; Dev.OnPacketArrival = new PacketArrivalEventHandler(Dev_OnPacketArrival); Dev.Open(); Dev.Filter = tstxtFilter.Text; Dev.StartCapture(); isRun = true; bgwPackageAna.RunWorkerAsync(); EnableControl(true); } } private void tsbtnClose_Click(object sender, EventArgs e) { ICaptureDevice Device = ((ClsComboboxItem)tscbxDeviceLst.SelectedItem).Value; Device.StopCapture(); Device.Close(); isRun = false; tsbtnClose.Enabled = false; } void Dev_OnPacketArrival(object sender, CaptureEventArgs e) { lock (objLock) { clsPkgCache.AddItem(e.Packet); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (isRun) { tsbtnClose_Click(null, null); } } private void bgwPackageAna_DoWork(object sender, DoWorkEventArgs e) { while(isRun || clsPkgCache.GetCount() >0 ) { PackageAna(); Thread.Sleep(50); } } private void bgwPackageAna_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { EnableControl(false); } private void dgvPackage_CurrentCellChanged(object sender, EventArgs e) { if (dgvPackage.CurrentCell != null) { StrPackage sp; lstPackage.TryGetValue((Int64)dgvPackage[0, dgvPackage.CurrentCell.RowIndex].Value, out sp); if (sp.Packet != null) { hexEditor1.LoadFromFile(sp.Packet.Bytes); txtPackageData.Text = sp.Packet.PrintHex(); } } } private void timer1_Tick(object sender, EventArgs e) { lblPackageCacheCount.Text = clsPkgCache.GetCount().ToString(); } private void toolStripButton1_Click(object sender, EventArgs e) { Ini(); } } }