Capture.cs

This example demonstrates how to use PacketX to capture packets from C#.
See also:
PacketX , Packet , Adapter
00001 
00002 // File:         Capture.cs
00003 //
00004 // Description:  This script demonstrates how to capture packets
00005 //
00006 // Notes:        tlbimp PacketX.dll && csc /R:PacketXLib.dll Capture.cs
00007 //
00008 // Created:      May 26, 2004
00009 //
00010 // Copyright (c) 2000-2004 BeeSync Technologies.
00012 
00013 using System;
00014 using PacketXLib;
00015 
00016 namespace Capture
00017 {
00018   class Test 
00019   {
00020     // Needed to format packet data
00021     static System.Globalization.CultureInfo oCulture;
00022 
00024     [MTAThread]
00025     static void Main(string[] args)
00026     {
00027       // Number formatting
00028       oCulture = new System.Globalization.CultureInfo(0x007F);
00029 
00031       PacketXClass oPktX = new PacketXClass();
00032       oPktX.OnPacket += new _IPktXPacketXEvents_OnPacketEventHandler(PacketX_OnPacket);
00033       
00034       // Display network adapters
00035       AdapterCollection oAdapters = (AdapterCollection)oPktX.Adapters;
00036       for (int i = 0; i < oAdapters.Count ; i++) 
00037       {
00038         if (Convert.ToBoolean(oAdapters[i+1].IsGood))         
00039         {
00040           Console.WriteLine("(" + (i+1) + ") " + oAdapters[i+1].Description);
00041           //PrintAdapter(oAdapters[i+1]);
00042         }
00043       }
00044       // Select network adapter
00045       oPktX.Adapter = null;
00046       while (oPktX.Adapter == null)
00047       {
00048         Console.Write("Choose adapter#");
00049         try 
00050         { 
00051           int nSelected = Convert.ToInt16(Console.ReadLine().Trim(),10);
00052           oPktX.Adapter = oAdapters[nSelected];
00053         }
00054         catch (System.Exception)
00055         {
00056           Console.WriteLine("Invalid adapter number.");
00057         }
00058       }
00059       // Capture buffer parameters
00060       Adapter oAdapter = (Adapter)oPktX.Adapter;
00061       oAdapter.BuffSize=256*1024; // 256 KB
00062       oAdapter.BuffMinToCopy=0;
00063 
00064       // Hardware filter and capture mode
00065       oAdapter.HWFilter=PktXPacketType.PktXPacketTypePromiscuous;
00066       oAdapter.Mode=PktXMode.PktXModeCapture;
00067 
00068       // Start capture
00069       oPktX.Start();
00070       System.Threading.Thread.Sleep(60000);                 
00071       oPktX.Stop();
00072       
00073       PrintStats(oAdapter);
00074     }
00075 
00076     // OnPacket event handler.
00077     static void PacketX_OnPacket(Packet aPacket)
00078     {
00079       PrintHead(aPacket);
00080       PrintData(aPacket);
00081     }
00082     
00083     static void PrintAdapter(Adapter aAdapter)
00084     {
00085       Console.WriteLine("Device name is " + aAdapter.Device);
00086       Console.Write("Link type is "); 
00087       switch (aAdapter.LinkType) 
00088       {
00089         case PktXLinkType.PktXLinkType802_3:
00090           Console.WriteLine("Ethernet (802.3)");
00091           break;
00092         case PktXLinkType.PktXLinkType802_5:
00093           Console.WriteLine("Token Ring (802.5)");
00094           break;
00095         case PktXLinkType.PktXLinkTypeFddi:
00096           Console.WriteLine("FDDI");
00097           break;
00098         case PktXLinkType.PktXLinkTypeWan:
00099           Console.WriteLine("WAN");
00100           break;
00101         case PktXLinkType.PktXLinkTypeLocalTalk:
00102           Console.WriteLine("LocalTalk");
00103           break;
00104         case PktXLinkType.PktXLinkTypeDix:
00105           Console.WriteLine("DIX");
00106           break;
00107         case PktXLinkType.PktXLinkTypeArcnetRaw:
00108           Console.WriteLine("ARCNET (raw)");
00109           break;
00110         case PktXLinkType.PktXLinkTypeArcnet878_2:
00111           Console.WriteLine("ARCNET (878.2)");
00112           break;
00113         case PktXLinkType.PktXLinkTypeAtm:
00114           Console.WriteLine("ATM");
00115           break;
00116         case PktXLinkType.PktXLinkTypeWirelessWan:
00117           Console.WriteLine("NdisWirelessXxx media");
00118           break;
00119         default: 
00120           Console.WriteLine("Unknown!");
00121           break;
00122       }
00123       Console.WriteLine("Link speed is " + aAdapter.LinkSpeed + " bps");
00124       Console.WriteLine("Network IP addres is " + aAdapter.NetIP);
00125       Console.WriteLine("Network mask is " + aAdapter.NetMask);
00126       Console.WriteLine("HW address is " + aAdapter.HWAddress);
00127     }
00128     
00129     static void PrintHead(Packet aPacket)
00130     {
00131       string sText = "----------------------- Packet Header ---------------------\n";
00132       
00133       sText += "Original size " + aPacket.OriginalSize + " bytes\n";
00134       sText += "Capture size " + aPacket.DataSize + " bytes\n";
00135       sText += "Capture time " + aPacket.TimeSec + " (number of seconds from 1/1/1970)\n";
00136       sText += "Capture microseconds " + aPacket.TimeUSec + "\n";
00137       sText += "Capture date " + aPacket.Date + " (system date and time)";
00138       
00139       Console.WriteLine(sText);
00140     }
00141     
00142     static void PrintData(Packet aPacket)
00143     {     
00144       string sData = "----------------------- Packet Data -----------------------\n"; 
00145       
00146       int nPosition = 0, nColumns = 16;
00147       for (int i=0; i < aPacket.DataArray.Length; i++)
00148       {
00149         if (nPosition == 8)
00150           sData += " ";
00151 
00152         if (nPosition >= nColumns)
00153         {
00154           nPosition = 1;
00155           sData += "\n";
00156         }
00157         else
00158           nPosition++;
00159 
00160         byte nByte = (byte) aPacket.DataArray.GetValue(i);
00161         if (nByte < 16)
00162           sData += "0";
00163 
00164         sData += nByte.ToString("X",oCulture.NumberFormat) + " ";
00165       }
00166       Console.WriteLine(sData);
00167     }
00168     
00169     static void PrintStats(Adapter aAdapter)
00170     {
00171       string sText = "------------------- Capture Statistics --------------------\n";
00172       
00173       sText += "Packets received " + aAdapter.PacketsRecv + "\n";
00174       sText += "Packets lost " + aAdapter.PacketsLost;
00175       
00176       Console.WriteLine(sText);
00177     }    
00178   }
00179 }
00180 

Copyright © 2000-2007 beeSync. All rights reserved.