Exemplo n.º 1
0
        private void CalculateCheckSum()
        {
            //if (!(i == 5)) //checksum feild is 10-11th byte (5th short), which is skipped
            ReComputeHeaderLen();
            byte[] headerSegment = new byte[hLen];
            int    counter       = 0;

            NetLib.WriteByte08(headerSegment, ref counter, (byte)(_verHi + (hLen >> 2)));
            NetLib.WriteByte08(headerSegment, ref counter, typeOfService);//DSCP/ECN
            NetLib.WriteUInt16(headerSegment, ref counter, length);

            NetLib.WriteUInt16(headerSegment, ref counter, id);
            NetLib.WriteByte08(headerSegment, ref counter, fragmentFlags1);
            NetLib.WriteByte08(headerSegment, ref counter, fragmentFlags2);

            NetLib.WriteByte08(headerSegment, ref counter, ttl);
            NetLib.WriteByte08(headerSegment, ref counter, Protocol);
            NetLib.WriteUInt16(headerSegment, ref counter, 0); //header csum

            NetLib.WriteByteArray(headerSegment, ref counter, SourceIP);
            NetLib.WriteByteArray(headerSegment, ref counter, DestinationIP);

            //options
            for (int i = 0; i < Options.Count; i++)
            {
                NetLib.WriteByteArray(headerSegment, ref counter, Options[i].GetBytes());
            }
            counter = hLen;

            checksum = InternetChecksum(headerSegment);
        }
Exemplo n.º 2
0
        public override bool VerifyCheckSum(byte[] srcIP, byte[] dstIP)
        {
            UInt16 TCPLength  = (UInt16)(Length);
            int    pHeaderLen = (12 + TCPLength);

            if ((pHeaderLen & 1) != 0)
            {
                //Error.WriteLine("OddSizedPacket");
                pHeaderLen += 1;
            }

            byte[] headerSegment = new byte[pHeaderLen];
            int    counter       = 0;

            NetLib.WriteByteArray(headerSegment, ref counter, srcIP);
            NetLib.WriteByteArray(headerSegment, ref counter, dstIP);
            counter += 1;//[8] = 0
            NetLib.WriteByte08(headerSegment, ref counter, Protocol);
            NetLib.WriteUInt16(headerSegment, ref counter, (UInt16)TCPLength);
            //Pseudo Header added
            //Rest of data is normal neader+data
            NetLib.WriteByteArray(headerSegment, ref counter, GetBytes());

            UInt16 CsumCal = IPPacket.InternetChecksum(headerSegment);

            //Error.WriteLine("Checksum Good = " + (CsumCal == 0));
            return(CsumCal == 0);
        }
Exemplo n.º 3
0
        public bool VerifyCheckSum()
        {
            ReComputeHeaderLen();
            byte[] headerSegment = new byte[hLen];
            int    counter       = 0;

            NetLib.WriteByte08(headerSegment, ref counter, (byte)(_verHi + (hLen >> 2)));
            NetLib.WriteByte08(headerSegment, ref counter, typeOfService);//DSCP/ECN
            NetLib.WriteUInt16(headerSegment, ref counter, length);

            NetLib.WriteUInt16(headerSegment, ref counter, id);
            NetLib.WriteByte08(headerSegment, ref counter, fragmentFlags1);
            NetLib.WriteByte08(headerSegment, ref counter, fragmentFlags2);

            NetLib.WriteByte08(headerSegment, ref counter, ttl);
            NetLib.WriteByte08(headerSegment, ref counter, Protocol);
            NetLib.WriteUInt16(headerSegment, ref counter, checksum); //header csum

            NetLib.WriteByteArray(headerSegment, ref counter, SourceIP);
            NetLib.WriteByteArray(headerSegment, ref counter, DestinationIP);

            //options
            for (int i = 0; i < Options.Count; i++)
            {
                NetLib.WriteByteArray(headerSegment, ref counter, Options[i].GetBytes());
            }
            counter = hLen;

            UInt16 CsumCal = InternetChecksum(headerSegment);

            return(CsumCal == 0);
        }
Exemplo n.º 4
0
        public override bool VerifyCheckSum(byte[] srcIP, byte[] dstIP)
        {
            int pHeaderLen = (12) + HeaderLength + data.Length;

            if ((pHeaderLen & 1) != 0)
            {
                pHeaderLen += 1;
            }

            byte[] headerSegment = new byte[pHeaderLen];
            int    counter       = 0;

            NetLib.WriteByteArray(headerSegment, ref counter, srcIP);
            NetLib.WriteByteArray(headerSegment, ref counter, dstIP);
            counter += 1;//[8] = 0
            NetLib.WriteByte08(headerSegment, ref counter, Protocol);
            NetLib.WriteUInt16(headerSegment, ref counter, Length);

            //Pseudo Header added
            //Rest of data is normal Header+data (with zerored checksum feild)
            NetLib.WriteByteArray(headerSegment, ref counter, GetBytes());

            UInt16 CsumCal = IPPacket.InternetChecksum(headerSegment);

            //Error.WriteLine("UDP Checksum Good = " + (CsumCal == 0));
            return(CsumCal == 0);
        }
Exemplo n.º 5
0
        public override byte[] GetBytes()
        {
            CalculateCheckSum(); //ReComputeHeaderLen called in CalculateCheckSum
            _pl.CalculateCheckSum(SourceIP, DestinationIP);

            byte[] ret     = new byte[Length];
            int    counter = 0;

            NetLib.WriteByte08(ret, ref counter, (byte)(_verHi + (hLen >> 2)));
            NetLib.WriteByte08(ret, ref counter, typeOfService);//DSCP/ECN
            NetLib.WriteUInt16(ret, ref counter, length);

            NetLib.WriteUInt16(ret, ref counter, id);
            NetLib.WriteByte08(ret, ref counter, fragmentFlags1);
            NetLib.WriteByte08(ret, ref counter, fragmentFlags2);

            NetLib.WriteByte08(ret, ref counter, ttl);
            NetLib.WriteByte08(ret, ref counter, Protocol);
            NetLib.WriteUInt16(ret, ref counter, checksum); //header csum

            NetLib.WriteByteArray(ret, ref counter, SourceIP);
            NetLib.WriteByteArray(ret, ref counter, DestinationIP);;

            //options
            for (int i = 0; i < Options.Count; i++)
            {
                NetLib.WriteByteArray(ret, ref counter, Options[i].GetBytes());
            }
            counter = hLen;

            byte[] plBytes = _pl.GetBytes();
            NetLib.WriteByteArray(ret, ref counter, plBytes);
            return(ret);
        }
Exemplo n.º 6
0
        public override void CalculateCheckSum(byte[] srcIP, byte[] dstIP)
        {
            int pHeaderLen = (12) + HeaderLength + data.Length;

            if ((pHeaderLen & 1) != 0)
            {
                pHeaderLen += 1;
            }

            byte[] headerSegment = new byte[pHeaderLen];
            int    counter       = 0;

            NetLib.WriteByteArray(headerSegment, ref counter, srcIP);
            NetLib.WriteByteArray(headerSegment, ref counter, dstIP);
            counter += 1;//[8] = 0
            NetLib.WriteByte08(headerSegment, ref counter, Protocol);
            NetLib.WriteUInt16(headerSegment, ref counter, Length);

            //Pseudo Header added
            //Rest of data is normal Header+data (with zerored checksum feild)
            //Null Checksum
            checksum = 0;
            NetLib.WriteByteArray(headerSegment, ref counter, GetBytes());

            checksum = IPPacket.InternetChecksum(headerSegment); //For performance, we can set this to = zero
        }
Exemplo n.º 7
0
        public override byte[] GetBytes()
        {
            int len = Length;

            byte[] ret     = new byte[len];
            int    counter = 0;

            NetLib.WriteUInt16(ret, ref counter, SourcePort);
            NetLib.WriteUInt16(ret, ref counter, DestinationPort);
            NetLib.WriteUInt32(ret, ref counter, SequenceNumber);
            NetLib.WriteUInt32(ret, ref counter, AcknowledgementNumber);
            NetLib.WriteByte08(ret, ref counter, dataOffsetAndNS_Flag);
            NetLib.WriteByte08(ret, ref counter, flags);
            NetLib.WriteUInt16(ret, ref counter, WindowSize);
            NetLib.WriteUInt16(ret, ref counter, checksum);
            NetLib.WriteUInt16(ret, ref counter, urgentPointer);

            //options
            for (int i = 0; i < Options.Count; i++)
            {
                NetLib.WriteByteArray(ret, ref counter, Options[i].GetBytes());
            }
            counter = headerLength;
            NetLib.WriteByteArray(ret, ref counter, data);
            return(ret);
        }
Exemplo n.º 8
0
        public override void CalculateCheckSum(byte[] srcIP, byte[] dstIP)
        {
            Int16 TCPLength  = (Int16)(headerLength + data.Length);
            int   pHeaderLen = (12 + TCPLength);

            if ((pHeaderLen & 1) != 0)
            {
                //Error.WriteLine("OddSizedPacket");
                pHeaderLen += 1;
            }

            byte[] headerSegment = new byte[pHeaderLen];
            int    counter       = 0;

            NetLib.WriteByteArray(headerSegment, ref counter, srcIP);
            NetLib.WriteByteArray(headerSegment, ref counter, dstIP);
            counter += 1;//[8] = 0
            NetLib.WriteByte08(headerSegment, ref counter, Protocol);
            NetLib.WriteUInt16(headerSegment, ref counter, (UInt16)TCPLength);
            //Pseudo Header added
            //Rest of data is normal Header+data (with zerored checksum feild)
            //Null Checksum
            checksum = 0;
            NetLib.WriteByteArray(headerSegment, ref counter, GetBytes());

            checksum = IPPacket.InternetChecksum(headerSegment);
        }
Exemplo n.º 9
0
        public override byte[] GetBytes()
        {
            byte[] ret     = base.GetBytes();
            int    counter = base.Length;

            NetLib.WriteUInt32(ret, ref counter, ttl);
            NetLib.WriteUInt16(ret, ref counter, (UInt16)data.Length);
            NetLib.WriteByteArray(ret, ref counter, data);
            return(ret);
        }
Exemplo n.º 10
0
        public override byte[] GetBytes()
        {
            byte[] ret     = new byte[Length];
            int    counter = 0;

            NetLib.WriteByte08(ret, ref counter, Code);
            NetLib.WriteByte08(ret, ref counter, (byte)(Length - 2));
            NetLib.WriteByteArray(ret, ref counter, clientID);
            return(ret);
        }
Exemplo n.º 11
0
        public virtual byte[] GetBytes()
        {
            byte[] ret     = new byte[Length];
            int    counter = 0;

            NetLib.WriteByteArray(ret, ref counter, nameBytes);
            NetLib.WriteUInt16(ret, ref counter, Type);
            NetLib.WriteUInt16(ret, ref counter, Class);
            return(ret);
        }
Exemplo n.º 12
0
        public override byte[] GetBytes()
        {
            byte[] ret     = new byte[Length];
            int    counter = 0;

            NetLib.WriteByte08(ret, ref counter, Type);
            NetLib.WriteByte08(ret, ref counter, maxResponseTime);
            NetLib.WriteUInt16(ret, ref counter, checksum);
            NetLib.WriteByteArray(ret, ref counter, GroupAddress);
            //TODO version 3
            return(ret);
        }
Exemplo n.º 13
0
        public override byte[] GetBytes()
        {
            byte[] ret     = new byte[Length];
            int    counter = 0;

            NetLib.WriteByte08(ret, ref counter, Type);
            NetLib.WriteByte08(ret, ref counter, Code);
            NetLib.WriteUInt16(ret, ref counter, checksum);
            NetLib.WriteByteArray(ret, ref counter, HeaderData);
            NetLib.WriteByteArray(ret, ref counter, Data);
            return(ret);
        }
Exemplo n.º 14
0
        public override byte[] GetBytes()
        {
            byte[] ret     = new byte[Length];
            int    counter = 0;

            NetLib.WriteUInt16(ret, ref counter, SourcePort);
            NetLib.WriteUInt16(ret, ref counter, DestinationPort);
            NetLib.WriteUInt16(ret, ref counter, Length);
            NetLib.WriteUInt16(ret, ref counter, checksum);

            NetLib.WriteByteArray(ret, ref counter, data);
            return(ret);
        }
Exemplo n.º 15
0
        public override byte[] GetBytes()
        {
            byte[] ret     = new byte[Length];
            int    counter = 0;

            NetLib.WriteByte08(ret, ref counter, Code);
            NetLib.WriteByte08(ret, ref counter, (byte)(Length - 2));
            foreach (byte[] dIP in dnsServers)
            {
                NetLib.WriteByteArray(ret, ref counter, dIP);
            }
            return(ret);
        }
Exemplo n.º 16
0
        public byte[] GetBytes()
        {
            //Calc length
            int length = 2 * 2 + 4 * 2;

            for (int i = 0; i < Questions.Count; i++)
            {
                length += Questions[i].Length;
            }
            for (int i = 0; i < Answers.Count; i++)
            {
                length += Answers[i].Length;
            }
            for (int i = 0; i < Authorities.Count; i++)
            {
                length += Authorities[i].Length;
            }
            for (int i = 0; i < Additional.Count; i++)
            {
                length += Additional[i].Length;
            }

            byte[] ret     = new byte[length];
            int    counter = 0;

            NetLib.WriteUInt16(ref ret, ref counter, ID);
            NetLib.WriteByte08(ref ret, ref counter, flags1);
            NetLib.WriteByte08(ref ret, ref counter, flags2);
            NetLib.WriteUInt16(ref ret, ref counter, (ushort)Questions.Count);
            NetLib.WriteUInt16(ref ret, ref counter, (ushort)Answers.Count);
            NetLib.WriteUInt16(ref ret, ref counter, (ushort)Authorities.Count);
            NetLib.WriteUInt16(ref ret, ref counter, (ushort)Additional.Count);

            for (int i = 0; i < Questions.Count; i++)
            {
                NetLib.WriteByteArray(ref ret, ref counter, Questions[i].GetBytes());
            }
            for (int i = 0; i < Answers.Count; i++)
            {
                NetLib.WriteByteArray(ref ret, ref counter, Answers[i].GetBytes());
            }
            for (int i = 0; i < Authorities.Count; i++)
            {
                NetLib.WriteByteArray(ref ret, ref counter, Authorities[i].GetBytes());
            }
            for (int i = 0; i < Additional.Count; i++)
            {
                NetLib.WriteByteArray(ref ret, ref counter, Additional[i].GetBytes());
            }
            return(ret);
        }
Exemplo n.º 17
0
        public byte[] GetBytes(UInt16 MaxLen)
        {
            //int len = 576; //Min size;
            //We will create a message of the min size and hop it fits.
            //byte[] ret = new byte[240]; //Fixed size section
            byte[] ret     = new byte[MaxLen];
            int    counter = 0;

            NetLib.WriteByte08(ret, ref counter, OP);
            NetLib.WriteByte08(ret, ref counter, HardwareType);
            NetLib.WriteByte08(ret, ref counter, HardwareAddressLength);
            NetLib.WriteByte08(ret, ref counter, Hops);

            NetLib.WriteUInt32(ret, ref counter, TransactionID);

            NetLib.WriteUInt16(ret, ref counter, Seconds);
            NetLib.WriteUInt16(ret, ref counter, Flags);

            NetLib.WriteByteArray(ret, ref counter, ClientIP);
            NetLib.WriteByteArray(ret, ref counter, YourIP);
            NetLib.WriteByteArray(ret, ref counter, ServerIP);
            NetLib.WriteByteArray(ret, ref counter, GatewayIP);

            NetLib.WriteByteArray(ret, ref counter, ClientHardwareAddress);
            //empty bytes
            NetLib.WriteByteArray(ret, ref counter, new byte[64]);
            NetLib.WriteByteArray(ret, ref counter, new byte[128]);

            NetLib.WriteUInt32(ret, ref counter, MagicCookie);

            //const UInt16 minOpLength = 64;
            //UInt16 OpLength = minOpLength;
            //byte[] retOp = new byte[minOpLength];
            //int opOffset = 0;
            for (int i = 0; i < Options.Count; i++)
            {
                NetLib.WriteByteArray(ret, ref counter, Options[i].GetBytes());
            }

            ////byte[] RetFinal = new byte[OpLength+240];
            //byte[] RetFinal = new byte[MaxLen];
            //Utils.memcpy(ref RetFinal, 0, ret, 0, 240);
            //Utils.memcpy(ref RetFinal, 240, retOp, 0, OpLength);
            //return RetFinal;
            return(ret);
        }
Exemplo n.º 18
0
        public override void CalculateCheckSum(byte[] srcIP, byte[] dstIP)
        {
            int pHeaderLen = ((Length));

            if ((pHeaderLen & 1) != 0)
            {
                //Error.WriteLine("OddSizedPacket");
                pHeaderLen += 1;
            }

            byte[] headerSegment = new byte[pHeaderLen];
            int    counter       = 0;

            checksum = 0;
            NetLib.WriteByteArray(headerSegment, ref counter, GetBytes());

            checksum = IPPacket.InternetChecksum(headerSegment);
        }
Exemplo n.º 19
0
        public override byte[] GetBytes()
        {
            byte[] ret     = new byte[Length];
            int    counter = 0;

            NetLib.WriteUInt16(ret, ref counter, HardWareType);
            //
            DataLib.WriteUInt16(ret, ref counter, Protocol);
            //
            NetLib.WriteByte08(ret, ref counter, HardwareAddressLength);
            NetLib.WriteByte08(ret, ref counter, ProtocolAddressLength);
            NetLib.WriteUInt16(ret, ref counter, OP);

            NetLib.WriteByteArray(ret, ref counter, SenderHardwareAddress);
            NetLib.WriteByteArray(ret, ref counter, SenderProtocolAddress);

            NetLib.WriteByteArray(ret, ref counter, TargetHardwareAddress);
            NetLib.WriteByteArray(ret, ref counter, TargetProtocolAddress);
            return(ret);
        }
Exemplo n.º 20
0
        public override bool VerifyCheckSum(byte[] srcIP, byte[] dstIP)
        {
            int pHeaderLen = ((Length));

            if ((pHeaderLen & 1) != 0)
            {
                //Error.WriteLine("OddSizedPacket");
                pHeaderLen += 1;
            }

            byte[] headerSegment = new byte[pHeaderLen];
            int    counter       = 0;

            NetLib.WriteByteArray(headerSegment, ref counter, GetBytes());

            UInt16 CsumCal = IPPacket.InternetChecksum(headerSegment);

            //Error.WriteLine("IGMP Checksum Good = " + (CsumCal == 0));
            return(CsumCal == 0);
        }