как получить http контент с Sharppcap - PullRequest
0 голосов
/ 31 мая 2019

Для моего школьного проекта мы должны сделать человека посередине.Но нам не удается получить HTTP-контент.Я написал небольшую вещь для повторной сборки данных полезной нагрузки tcp, но я получаю только заголовок HTTP, а не исходный код.Я вижу, что на Wireshark данные не сжаты, но я не знаю, что это значит.

Это мой код класса TcpSession

 public class TcpSession : IDisposable
    {
        private MemoryStream _clientBuffer;
        private MemoryStream _serverBuffer;


        public TcpSession()
        {
            _clientBuffer = new MemoryStream();
            _serverBuffer = new MemoryStream();
        }

        public void WritePacket(TcpPacket packet, bool toServer)
        {
            if (toServer)
            {
                _clientBuffer.Write(packet.PayloadData, 0, packet.PayloadData.Length);
            }
            else
            {
                _serverBuffer.Write(packet.PayloadData, 0, packet.PayloadData.Length);
            }
        }

        public byte[] GetBuffer(bool toServer)
        {
            if (toServer)
            {
                return  _clientBuffer.ToArray();
            }

            return _serverBuffer.ToArray();
        }

        public void Dispose()
        {
            _clientBuffer?.Dispose();
            _serverBuffer?.Dispose();
        }

    }

PacketAssembler

  public class PacketAssembler
    {
        public delegate void OnPacketReassembledDelegate(TcpSession session);

        public OnPacketReassembledDelegate OnPacketReassembled;

        private Dictionary<int, TcpSession> _tcpSessions;
        public PacketAssembler()
        {
            _tcpSessions = new Dictionary<int, TcpSession>();
        }

        public void AddPacket(TcpPacket packet, bool toServer)
        {
            // Client port (unique) is used for the dictionary.
            int port = toServer ? packet.SourcePort : packet.DestinationPort;

            if (packet.Syn) // Connection established
            {
                if (!_tcpSessions.ContainsKey(port))
                {
                    _tcpSessions.Add(port, new TcpSession());
                }
            } 
            else if (packet.Psh) // Push data 
            {
                _tcpSessions[port].WritePacket(packet, toServer);
            }
            else if (packet.Rst) // reset the session
            {
                _tcpSessions.Remove(port);
            }
            else if (packet.Fin) // End the session
            {
                OnPacketReassembled(_tcpSessions[port]);
                _tcpSessions.Remove(port);
            }

        }

    }

1 Ответ

0 голосов
/ 31 мая 2019

Вы проверили пакетные соединения?https://github.com/chmorgan/packetnet-connections

...