最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#利用SharpPcap實現(xiàn)網(wǎng)絡(luò)包捕獲嗅探

 更新時間:2018年03月19日 17:07:26   作者:Alan.hsiang  
這篇文章主要為大家詳細(xì)介紹了C#利用SharpPcap實現(xiàn)網(wǎng)絡(luò)包捕獲嗅探,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文是利用SharpPcap實現(xiàn)網(wǎng)絡(luò)包的捕獲的小例子,實現(xiàn)了端口監(jiān)控,數(shù)據(jù)包捕獲等功能,主要用于學(xué)習(xí)分享。

什么是SharpPcap?

SharpPcap 是一個.NET 環(huán)境下的網(wǎng)絡(luò)包捕獲框架,基于著名的 pcap/WinPcap 庫開發(fā)。提供了捕獲、注入、分析和構(gòu)建的功能,適用于 C# 和 VB NET 開發(fā)語言。

SharpPcap有兩部分組成:1> SharpPcap.dll 負(fù)責(zé)數(shù)據(jù)的捕獲  2> PacketDotNet.dll負(fù)責(zé)數(shù)據(jù)包的解析

思路:

通過進(jìn)程名字獲取對應(yīng)的端口號。
SharpPcap獲取對應(yīng)的數(shù)據(jù)包,通過解析數(shù)據(jù)包過濾相關(guān)的端口。

涉及知識點:

Process 獲取相關(guān)進(jìn)程信息。
netstat命令:netstat -ano|find "3844" 獲取進(jìn)程對應(yīng)的端口
SharpPcap相關(guān)信息:

       通過CaptureDeviceList的靜態(tài)方法獲取設(shè)備列表。
       通過OnPacketArrival事件接收數(shù)據(jù)包。
       通過PacketDotNet來解析數(shù)據(jù)包

效果圖下:

SharpPcap核心代碼:

/// <summary>
  /// 開始捕捉
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnStart_Click(object sender, EventArgs e)
  {
   if (this.combDevice.SelectedIndex > -1)
   {
    StartCapture(this.combDevice.SelectedIndex);
    this.btnStart.Enabled = false;
    this.btnStop.Enabled = true;
   }
   else {
    MessageBox.Show(this,"請選擇一個設(shè)備","提示",MessageBoxButtons.OK);
   }
  }

  /// <summary>
  /// 停止捕捉
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnStop_Click(object sender, EventArgs e)
  {
   Shutdown();
   this.btnStop.Enabled = false;
   this.btnStart.Enabled = true;
  }

  private void StartCapture(int itemIndex)
  {
   packetCount = 0;
   device = CaptureDeviceList.Instance[itemIndex];
   packetStrings = new Queue<PacketWrapper>();
   bs = new BindingSource();
   dgvData.DataSource = bs;
   LastStatisticsOutput = DateTime.Now;

   // start the background thread
   backgroundThreadStop = false;
   backgroundThread = new Thread(BackgroundThread);
   backgroundThread.Start();

   
   // setup background capture
   device.OnPacketArrival += new PacketArrivalEventHandler(device_OnPacketArrival);
   device.OnCaptureStopped += new CaptureStoppedEventHandler(device_OnCaptureStopped);
   device.Open();

   // tcpdump filter to capture only TCP/IP packets
   string filter = "ip and tcp";
   device.Filter = filter;

   // force an initial statistics update
   captureStatistics = device.Statistics;
   UpdateCaptureStatistics();

   // start the background capture
   device.StartCapture();

   btnStop.Enabled = true;
  }

  /// <summary>
  /// 設(shè)備接收事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void device_OnPacketArrival(object sender, CaptureEventArgs e)
  {
   // print out periodic statistics about this device
   var Now = DateTime.Now;
   var interval = Now - LastStatisticsOutput;
   if (interval > new TimeSpan(0, 0, 2))
   {
    Console.WriteLine("device_OnPacketArrival: " + e.Device.Statistics);
    captureStatistics = e.Device.Statistics;
    statisticsUiNeedsUpdate = true;
    LastStatisticsOutput = Now;
   }
   
   lock (QueueLock)
   {
    PacketQueue.Add(e.Packet);
   }
  }

  /// <summary>
  /// 設(shè)備停止事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="status"></param>
  private void device_OnCaptureStopped(object sender, CaptureStoppedEventStatus status)
  {
   if (status != CaptureStoppedEventStatus.CompletedWithoutError)
   {
    MessageBox.Show("Error stopping capture", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
  }

  private void UpdateCaptureStatistics()
  {
   tlblStatistic.Text = string.Format("接收包: {0}, 丟棄包: {1}, 接口丟棄包: {2}", captureStatistics.ReceivedPackets,captureStatistics.DroppedPackets, captureStatistics.InterfaceDroppedPackets);
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# 9 新特性——record的相關(guān)總結(jié)

    C# 9 新特性——record的相關(guān)總結(jié)

    這篇文章主要介紹了C# 9 新特性——record的相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用c# 9的新特性,感興趣的朋友可以了解下
    2021-02-02
  • C# 控件屬性和InitializeComponent()關(guān)系案例詳解

    C# 控件屬性和InitializeComponent()關(guān)系案例詳解

    這篇文章主要介紹了C# 控件屬性和InitializeComponent()關(guān)系案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#利用FluentFTP實現(xiàn)FTP上傳下載功能詳解

    C#利用FluentFTP實現(xiàn)FTP上傳下載功能詳解

    FTP作為日常工作學(xué)習(xí)中,非常重要的一個文件傳輸存儲空間,想必大家都非常的熟悉了,那么如何快速的實現(xiàn)文件的上傳下載功能呢,本文以一個簡單的小例子,簡述如何通過FluentFTP實現(xiàn)文件的上傳和下載功能
    2023-02-02
  • C#之泛型詳解

    C#之泛型詳解

    本文詳細(xì)講解了C#中的泛型,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#開發(fā)紐曼USB來電小秘書客戶端總結(jié)

    C#開發(fā)紐曼USB來電小秘書客戶端總結(jié)

    這篇文章主要介紹了C#開發(fā)紐曼USB來電小秘書客戶端總結(jié),對于C#項目開發(fā)來說有一定的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • WPF實現(xiàn)自定義Panel面板的示例詳解

    WPF實現(xiàn)自定義Panel面板的示例詳解

    WPF中的Panel(面板),是繼承自FrameworkElement的抽象類,表示一個可以用來排列子元素的面板,本文主要來和大家聊聊WPF如何實現(xiàn)自定義Panel,感興趣的可以了解下
    2023-09-09
  • 使用SmtpClient發(fā)送郵件的方法

    使用SmtpClient發(fā)送郵件的方法

    本來想試試用SmtpClient來做一個簡單的發(fā)送郵件的Demo程序。卻不想在中途遇上了意料之外的事情,使得這次試驗過程變得有些曲折。
    2013-03-03
  • C#中使用CAS實現(xiàn)無鎖算法的示例詳解

    C#中使用CAS實現(xiàn)無鎖算法的示例詳解

    CAS(Compare-and-Swap)是一種多線程并發(fā)編程中常用的原子操作,用于實現(xiàn)多線程間的同步和互斥訪問。本文將利用CAS實現(xiàn)無鎖算法,需要的可以參考一下
    2023-04-04
  • C#線程委托BeginInvoke與EndInvoke的用法

    C#線程委托BeginInvoke與EndInvoke的用法

    這篇文章介紹了C#線程委托BeginInvoke與EndInvoke的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C# 繪制統(tǒng)計圖大全(柱狀圖, 折線圖, 扇形圖)

    C# 繪制統(tǒng)計圖大全(柱狀圖, 折線圖, 扇形圖)

    本篇文章介紹了C# 繪制統(tǒng)計圖大全,其中包括狀圖, 折線圖, 扇形圖,有需要的同學(xué)可以了解一下。
    2016-11-11

最新評論

罗平县| 泾源县| 红原县| 宣城市| 元江| 安宁市| 扎兰屯市| 五指山市| 喜德县| 曲麻莱县| 犍为县| 铜川市| 亚东县| 普安县| 拉孜县| 会同县| 都兰县| 崇信县| 晴隆县| 梓潼县| 应城市| 汉中市| 二连浩特市| 苍溪县| 菏泽市| 冷水江市| 西宁市| 兴隆县| 霍邱县| 抚宁县| 错那县| 临沭县| 景德镇市| 平顺县| 望城县| 龙山县| 无极县| 双峰县| 尚志市| 江川县| 霍林郭勒市|