在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 抓包 程序 实例源码下载

抓包 程序 实例源码下载

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.74M
  • 下载次数:37
  • 浏览次数:630
  • 发布时间:2014-07-11
  • 实例类别:C#语言基础
  • 发 布 人:heking520
  • 文件格式:.rar
  • 所需积分:2
 相关标签:

实例介绍

【实例简介】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();
        }







    }
}

标签:

实例下载地址

抓包 程序 实例源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警