Home » Source Code » » EthernetPacket.cs

EthernetPacket.cs ( File view )

From:
  • By 2010-08-21
  • View(s):38
  • Download(s):2
  • Point(s): 1
			/// <summary>************************************************************************
/// Copyright (C) 2001, Patrick Charles and Jonas Lehmann                   *
/// Distributed under the Mozilla Public License                            *
/// http://www.mozilla.org/NPL/MPL-1.1.txt                                *
/// *************************************************************************
/// </summary>
using System;
using System.Net.NetworkInformation;
using SharpPcap.Packets.Util;
using ArrayHelper = SharpPcap.Packets.Util.ArrayHelper;
using Timeval = SharpPcap.Packets.Util.Timeval;
namespace SharpPcap.Packets
{

    /// <summary> An ethernet packet.
    /// <p>
    /// Contains link-level header and data payload encapsulated by an ethernet
    /// packet.
    /// <p>
    /// There are currently two subclasses. IP and ARP protocols are supported.
    /// IPPacket extends with ip header and data information.
    /// ARPPacket extends with hardware and protocol addresses.
    /// 
    /// </summary>
    [Serializable]
    public class EthernetPacket : Packet, EthernetFields
    {

        /// <summary> Code constants for well-defined ethernet protocols.
        /// <p>
        /// Taken from linux/if_ether.h and tcpdump/ethertype.h
        /// 
        /// </summary>
        public struct EtherType
        {

            /// <summary> IP protocol.</summary>
            public const int IP = 0x0800;
            /// <summary> Address resolution protocol.</summary>
            public const int ARP = 0x0806;
            /// <summary> Reverse address resolution protocol.</summary>
            public const int RARP = 0x8035;
            /// <summary> Ethernet Loopback packet </summary>
            public const int LOOP = 0x0060;
            /// <summary> Ethernet Echo packet      </summary>
            public const int ECHO = 0x0200;
            /// <summary> Xerox PUP packet</summary>
            public const int PUP = 0x0400;
            /// <summary> CCITT X.25            </summary>
            public const int X25 = 0x0805;
            /// <summary> G8BPQ AX.25 Ethernet Packet   [ NOT AN OFFICIALLY REGISTERED ID ] </summary>
            public const int BPQ = 0x08FF;
            /// <summary> DEC Assigned proto</summary>
            public const int DEC = 0x6000;
            /// <summary> DEC DNA Dump/Load</summary>
            public const int DNA_DL = 0x6001;
            /// <summary> DEC DNA Remote Console</summary>
            public const int DNA_RC = 0x6002;
            /// <summary> DEC DNA Routing</summary>
            public const int DNA_RT = 0x6003;
            /// <summary> DEC LAT</summary>
            public const int LAT = 0x6004;
            /// <summary> DEC Diagnostics</summary>
            public const int DIAG = 0x6005;
            /// <summary> DEC Customer use</summary>
            public const int CUST = 0x6006;
            /// <summary> DEC Systems Comms Arch</summary>
            public const int SCA = 0x6007;
            /// <summary> Appletalk DDP </summary>
            public const int ATALK = 0x809B;
            /// <summary> Appletalk AARP</summary>
            public const int AARP = 0x80F3;
            /// <summary> IPX over DIX</summary>
            public const int IPX = 0x8137;
            /// <summary> IPv6 over bluebook</summary>
            public const int IPV6 = 0x86DD;
            /// <summary> Dummy type for 802.3 frames  </summary>
            public const int N802_3 = 0x0001;
            /// <summary> Dummy protocol id for AX.25  </summary>
            public const int AX25 = 0x0002;
            /// <summary> Every packet.</summary>
            public const int ALL = 0x0003;
            /// <summary> 802.2 frames</summary>
            public const int N802_2 = 0x0004;
            /// <summary> Internal only</summary>
            public const int SNAP = 0x0005;
            /// <summary> DEC DDCMP: Internal only</summary>
            public const int DDCMP = 0x0006;
            /// <summary> Dummy type for WAN PPP frames</summary>
            public const int WAN_PPP = 0x0007;
            /// <summary> Dummy type for PPP MP frames </summary>
            public const int PPP_MP = 0x0008;
            /// <summary> Localtalk pseudo type </summary>
            public const int LOCALTALK = 0x0009;
            /// <summary> Dummy type for Atalk over PPP</summary>
            public const int PPPTALK = 0x0010;
            /// <summary> 802.2 frames</summary>
            public const int TR_802_2 = 0x0011;
            /// <summary> Mobitex (kaz@cafe.net)</summary>
            public const int MOBITEX = 0x0015;
            /// <summary> Card specific control frames</summary>
            public const int CONTROL = 0x0016;
            /// <summary> Linux/IR</summary>
            public const int IRDA = 0x0017;
            // others not yet documented..
            
            public const int NS = 0x0600;
            public const int SPRITE = 0x0500;
            public const int TRAIL = 0x1000;
            public const int LANBRIDGE = 0x8038;
            public const int DECDNS = 0x803c;
            public const int DECDTS = 0x803e;
            public const int VEXP = 0x805b;
            public const int VPROD = 0x805c;
            public const int N8021Q = 0x8100;
            public const int PPP = 0x880b;
            public const int PPPOED = 0x8863;
            public const int PPPOES = 0x8864;
            public const int LOOPBACK = 0x9000;
            // spanning tree bridge protocol
            public const int STBPDU = 0x0026;
            // intel adapter fault tolerance heartbeats
            public const int INFTH = 0x886d;
            /// <summary> Ethernet protocol mask.</summary>
            public const int MASK = 0xffff;
        
}

        /// <summary> Extract the protocol type field from packet data.
        /// <p>
        /// The type field indicates what type of data is contained in the 
        /// packet's data block.
        /// </summary>
        /// <param name="packetBytes">packet bytes.
        /// </param>
        /// <returns> the ethernet type code. i.e. 0x800 signifies IP datagram.
        /// </returns>
        public static int extractProtocol(byte[] packetBytes)
        {

            // convert the bytes that contain the type code into a value..
            return packetBytes[EthernetFields_Fields.ETH_CODE_POS] << 8 | packetBytes[EthernetFields_Fields.ETH_CODE_POS + 1];
        
}

        /// <summary> Fetch the ethernet header length in bytes.</summary>
        virtual public int EthernetHeaderLength
        {

            get
            {

                return _ethernetHeaderLength;
            
}

        
}
        /// <summary> Fetch the packet ethernet header length.</summary>
        virtual public int HeaderLength
        {

            get
            {

                return EthernetHeaderLength;
            
}

        
}
        /// <summary> Fetch the ethernet header as a byte array.</summary>
        virtual public byte[] EthernetHeader
        {

            get
            {

                return PacketEncoding.extractHeader(0, EthernetHeaderLength, _bytes);
            
}

        
}
        /// <summary> Fetch the ethernet header as a byte array.</summary>
        override public byte[] Header
        {

            get
            {

                return EthernetHeader;
            
}

        
}
        /// <summary> Fetch the ethernet data as a byte array.</summary>
        virtual public byte[] EthernetData
        {

            get
            {

                return PacketEncoding.extractData(0, EthernetHeaderLength, _bytes);
            
}

        
}

        /// <summary> Fetch the ethernet protocol.</summary>
        /// <summary> Sets the ethernet protocol.</summary>
        virtual public int EthernetProtocol
        {

            get
            {

                return ArrayHelper.extractInteger(_bytes, EthernetFields_Fields.ETH_CODE_POS, EthernetFields_Fields.ETH_CODE_LEN);
            
}

            set
            {

                ArrayHelper.insertLong(_bytes, value, EthernetFields_Fields.ETH_CODE_POS, EthernetFields_Fields.ETH_CODE_LEN);
            
}

        
}

        /// <summary>
        ///  should be overriden by upper classes
        /// </summary>
        public virtual void OnOffsetChanged()
        {

            if(PcapHeader!=null)
            {

                PcapHeader = new PcapHeader(PcapHeader.Seconds,
                                            PcapHeader.MicroSeconds,
                                            (uint)_bytes.Length,
                                            (uint)_bytes.Length);
            
}
        
}

        /// <summary> Fetch the timeval containing the time the packet arrived on the 
        /// device where it was captured.
        /// </summary>
        override public Timeval Timeval
        {

            get
            {

                return _timeval;
            
}

        
}
        /// <summary> Fetch ascii escape sequence of the color associated with this packet type.</summary>
        override public System.String Color
        {

            get
            {

                return AnsiEscapeSequences_Fields.DARK_GRAY;
            
}

        
}
        override public byte[] Bytes
        {

            get
            {

                return _bytes;
            
}
            protected set
            {

                _bytes = value;
            
}

        
}
        // store the data here, all subclasses can offset into this
        private byte[] _bytes;

        // offset from beginning of byte array where the data payload 
        // (i.e. IP packet) starts. The size of the ethernet frame header.
        protected internal int _ethOffset;

        // time that the packet was captured off the wire
        protected
...
...
(Please download the complete source code to view)
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 1

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
Changelog16.90 kB10-08-09|02:39
010.00 B
010.00 B
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example01.IfList.csproj3.96 kB10-08-09|02:39
Example1.IfList.cs1.27 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example10.SendQueue.csproj4.49 kB10-08-09|02:39
Example10.SendQueues.cs4.61 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example11.Statistics.cs4.35 kB10-08-09|02:39
Example11.Statistics.csproj4.00 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example12.PacketManipulation.cs5.36 kB10-08-09|02:39
Example12.PacketManipulation.csproj4.02 kB10-08-09|02:39
010.00 B
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example02.ArpResolve.csproj4.31 kB10-08-09|02:39
Example2.ArpResolve.cs3.67 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example03.BasicCap.csproj3.99 kB10-08-09|02:39
Example3.BasicCap.cs2.87 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example04.BasicCapNoCallback.csproj4.02 kB10-08-09|02:39
Example4.BasicCapNoCallback.cs2.65 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example05.PcapFilter.csproj4.00 kB10-08-09|02:39
Example5.PcapFilter.cs3.13 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example06.DumpTCP.csproj3.99 kB10-08-09|02:39
Example6.DumpTCP.cs3.70 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example07.DumpToFile.csproj4.00 kB10-08-09|02:39
Example7.DumpToFile.cs3.18 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example08.ReadFile.csproj3.99 kB10-08-09|02:39
Example8.ReadFile.cs2.54 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.32 kB10-08-09|02:39
Example09.SendPacket.csproj4.00 kB10-08-09|02:39
Example9.SendPacket.cs2.92 kB10-08-09|02:39
LICENSE7.46 kB10-08-09|02:39
ReleaseProcess2.10 kB10-08-09|02:39
SharpPcap.sln8.49 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
AssemblyInfo.cs2.39 kB10-08-09|02:39
010.00 B
ARPFields.cs4.55 kB10-08-09|02:39
ARPPacket.cs10.30 kB10-08-09|02:39
EthernetFields.cs2.06 kB10-08-09|02:39
EthernetPacket.cs14.43 kB10-08-09|02:39
ICMPFields.cs2.13 kB10-08-09|02:39
ICMPMessage.cs4.84 kB10-08-09|02:39
ICMPMessages.cs4.43 kB10-08-09|02:39
ICMPPacket.cs7.85 kB10-08-09|02:39
IGMPFields.cs2.53 kB10-08-09|02:39
IGMPMessage.cs2.24 kB10-08-09|02:39
IGMPMessages.cs1.26 kB10-08-09|02:39
IGMPPacket.cs5.94 kB10-08-09|02:39
IPPacket.cs18.98 kB10-08-09|02:39
IPPort.cs99.14 kB10-08-09|02:39
IPPorts.cs34.59 kB10-08-09|02:39
IPProtocol.cs7.89 kB10-08-09|02:39
IPv4Fields.cs3.97 kB10-08-09|02:39
IPv4Packet.cs22.01 kB10-08-09|02:39
IPv6Fields.cs3.35 kB10-08-09|02:39
IPv6Packet.cs12.96 kB10-08-09|02:39
LinkLayer.cs7.54 kB10-08-09|02:39
LinkLayers.cs3.23 kB10-08-09|02:39
Packet.cs2.62 kB10-08-09|02:39
PacketEncoding.cs5.01 kB10-08-09|02:39
PacketFactory.cs3.21 kB10-08-09|02:39
RawPacket.cs3.58 kB10-08-09|02:39
TCPFields.cs3.67 kB10-08-09|02:39
TCPPacket.cs23.19 kB10-08-09|02:39
UDPFields.cs2.23 kB10-08-09|02:39
UDPPacket.cs10.09 kB10-08-09|02:39
010.00 B
AnsiEscapeSequences.cs5.99 kB10-08-09|02:39
ArrayHelper.cs6.92 kB10-08-09|02:39
ChecksumUtils.cs2.93 kB10-08-09|02:39
HexHelper.cs3.80 kB10-08-09|02:39
Timeval.cs1.97 kB10-08-09|02:39
makefile579.00 B10-08-09|02:39
makefile-test0.00 B10-08-09|02:39
util.csproj4.32 kB10-08-09|02:39
package.html1.07 kB10-08-09|02:39
Pcap.cs5.39 kB10-08-09|02:39
PcapAddress.cs2.15 kB10-08-09|02:39
PcapDevice.cs24.12 kB10-08-09|02:39
PcapDeviceCaptureLoop.cs5.21 kB10-08-09|02:39
PcapDeviceList.cs3.96 kB10-08-09|02:39
PcapEventArgs.cs1.69 kB10-08-09|02:39
PcapException.cs1.45 kB10-08-09|02:39
PcapHeader.cs5.91 kB10-08-09|02:39
PcapInterface.cs5.18 kB10-08-09|02:39
PcapOfflineDevice.cs3.96 kB10-08-09|02:39
PcapSendQueue.cs6.61 kB10-08-09|02:39
PcapStatistics.cs3.16 kB10-08-09|02:39
PcapUnmanagedStructures.cs8.85 kB10-08-09|02:39
010.00 B
ARP.cs7.52 kB10-08-09|02:39
Readme.Mono725.00 B10-08-09|02:39
SafeNativeMethods.cs11.41 kB10-08-09|02:39
SharpPcap.csproj8.54 kB10-08-09|02:39
SharpPcap.dll.config492.00 B10-08-09|02:39
Sockaddr.cs4.72 kB10-08-09|02:39
010.00 B
Convert.cs3.49 kB10-08-09|02:39
IPAddressRange.cs4.04 kB10-08-09|02:39
IPSubnet.cs2.41 kB10-08-09|02:39
IPUtil.cs8.93 kB10-08-09|02:39
Int64Range.cs1.77 kB10-08-09|02:39
NumberRange.cs5.54 kB10-08-09|02:39
Random.cs2.53 kB10-08-09|02:39
Version.cs1.43 kB10-08-09|02:39
010.00 B
SharpPcap.html31.81 kB10-08-09|02:39
010.00 B
SharpPcap.png15.47 kB10-08-09|02:39
010.00 B
App.ico1.05 kB10-08-09|02:39
ArpPacketTest.cs2.62 kB10-08-09|02:39
AssemblyInfo.cs2.28 kB10-08-09|02:39
CheckFilterTest.cs528.00 B10-08-09|02:39
EthernetPacketTest.cs7.32 kB10-08-09|02:39
Form1.cs2.91 kB10-08-09|02:39
Form1.resx6.83 kB10-08-09|02:39
IPAddressRangeTest.cs3.42 kB10-08-09|02:39
IPSubnetTest.cs599.00 B10-08-09|02:39
IPv6PacketTest.cs4.07 kB10-08-09|02:39
Int64RangeTest.cs3.41 kB10-08-09|02:39
InvalidPacketTest.cs1.25 kB10-08-09|02:39
IpUtilTest.cs2.12 kB10-08-09|02:39
PacketsTest.cs1.09 kB10-08-09|02:39
PcapGetAllDevices.cs781.00 B10-08-09|02:39
PcapTest.cs313.00 B10-08-09|02:39
SendTcpSynExample.cs6.63 kB10-08-09|02:39
SetFilterTest.cs646.00 B10-08-09|02:39
TCPPacketTest.cs3.24 kB10-08-09|02:39
Test.csproj6.20 kB10-08-09|02:39
UDPPacketTest.cs1.04 kB10-08-09|02:39
UdpTest.cs2.13 kB10-08-09|02:39
010.00 B
README827.00 B10-08-09|02:39
arp_request_response.pcap158.00 B10-08-09|02:39
ip_packet_bogus_length.pcap1.53 kB10-08-09|02:39
ipv6_http.pcap3.37 kB10-08-09|02:39
ipv6_icmpv6_packet.pcap110.00 B10-08-09|02:39
tcp.pcap106.00 B10-08-09|02:39
tcp_with_extra_bytes.pcap100.00 B10-08-09|02:39
test_stream.pcap613.00 B10-08-09|02:39
udp_dns_request_response.pcap521.00 B10-08-09|02:39
010.00 B
nunit.framework.dll44.00 kB10-08-09|02:39
make_bin_release1.31 kB10-08-09|02:39
make_src_release888.00 B10-08-09|02:39
...
Sponsored links

EthernetPacket.cs (241.84 kB)

Need 1 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D