【问题标题】:how to get http content with Sharppcap如何使用 Sharppcap 获取 http 内容
【发布时间】:2019-10-17 06:11:08
【问题描述】:

对于我的学校项目,我们必须做一个中间人。但是我们没有成功获取 HTTP 内容。我写了一些东西来重新组装 tcp 有效负载数据,但我只得到 HTTP Header 而不是源代码。我在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();
        }

    }

包组装器

  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);
            }

        }

    }

【问题讨论】:

    标签: c# tcp pcap sharppcap


    【解决方案1】:

    你检查过 packetnet-connections 吗? https://github.com/chmorgan/packetnet-connections

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 2011-12-01
      • 2014-10-20
      • 2021-11-17
      • 2012-12-14
      • 2020-07-24
      • 1970-01-01
      • 2021-05-11
      • 2013-05-18
      相关资源
      最近更新 更多