Member 12509625 Ответов: 0

Как получить необработанные данные полезной нагрузки TCP? С#


Я хочу написать необработанный сокет для получения данных полезной нагрузки из TCP-пакета..
Я пробовал WinPcap не удалось получить данные полезной нагрузки... что только показать количество байтов в полезной нагрузке предоставляется..

Что я уже пробовал:

public void Run()
      {

          using (PacketCommunicator communicator = 
                selectedAdapter.Open(65536,                                 // portion of the packet to capture
                                                                            // 65536 guarantees that the whole packet will be captured on all the link layers
                                    PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
                                    1000))                                  // read timeout
           {
                 
               if (communicator.DataLink.Kind != DataLinkKind.Ethernet)
                {
                   listBox1.Items.Add("This program works only on Ethernet networks.");
                    return;
                }

                // Compile the filter
                using (BerkeleyPacketFilter filter = communicator.CreateFilter("ip and tcp"))
                {
                    // Set the filter
                    communicator.SetFilter(filter);
                }

               listBox1.Items.Add("Listening on " + selectedAdapter.Description + "...");
                // start the capture
                communicator.ReceivePackets(0, PacketHandler);
           }

         }
       
        
        public  void PacketHandler(Packet packet)
        {

            listBox1.Items.Add(packet.Timestamp.ToString("yyyy-MM-dd hh:mm:ss.fff") + " length:" + packet.Length);
            
            IpV4Datagram ip = packet.Ethernet.IpV4;
            TcpDatagram tcp = ip.Tcp;
            
            listBox1.Items.Add(" ** Source **" + packet.Ethernet.IpV4.Source + " ** Destination **" + packet.Ethernet.IpV4.Destination + " ** Payload **" + packet.IpV4.Payload);

            listBox1.Items.Add(ip.Source + " : " + tcp.SourcePort + " ->>>  " + ip.Destination + "  :  " + tcp.DestinationPort);
            listBox1.Items.Add("Payload: "+tcp.Payload);
        
        }

Nathan Minier

Возможно, вам лучше всего послужит поиск источника тех, кто уже делает это лучше всего:
https://code.wireshark.org/review/gitweb?p=wireshark.git;a=дерево

0 Ответов