37 lines
1.4 KiB
C#
37 lines
1.4 KiB
C#
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Text;
|
||
|
|
||
|
namespace ProjectCarbon.Protocols
|
||
|
{
|
||
|
class TcpProtocol: IpSubProtocol
|
||
|
{
|
||
|
public TcpProtocol()
|
||
|
: base(Protocol.Tcp, "TCP", "Transmission Control Protocol")
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public override void ProcessData(byte[] bufferData)
|
||
|
{
|
||
|
BigEndianConverter endianConverter = new BigEndianConverter();
|
||
|
|
||
|
int sourcePort = endianConverter.ToUInt16(bufferData, 0);
|
||
|
int destinationPort = endianConverter.ToUInt16(bufferData, 2);
|
||
|
uint sequenceNumber = endianConverter.ToUInt32(bufferData, 4);
|
||
|
uint packNumber = endianConverter.ToUInt32(bufferData, 8);
|
||
|
int dataOffset = ((bufferData[12] & 0xF0) >> 4) * 4;
|
||
|
byte[] payload = new byte[bufferData.Length - dataOffset];
|
||
|
|
||
|
Array.Copy(bufferData, dataOffset, payload, 0, payload.Length);
|
||
|
|
||
|
// These are all the properties for TCP.
|
||
|
m_protocolProperties.Add("SourcePort", sourcePort);
|
||
|
m_protocolProperties.Add("DestinationPort", destinationPort);
|
||
|
m_protocolProperties.Add("SequenceNumber", sequenceNumber);
|
||
|
m_protocolProperties.Add("AckNumber", packNumber);
|
||
|
m_protocolProperties.Add("DataOffset", dataOffset);
|
||
|
m_protocolProperties.Add("Payload", payload);
|
||
|
}
|
||
|
}
|
||
|
}
|