Exemplo n.º 1
0
        public bool FilterPacket(EthernetPacket ethernetPacket)
        {
            var iface = PacketDispatcher.Instance.GetCurrentInterface();

            if (ethernetPacket == null)
            {
                return(false);
            }

            // perform basic checks to detect if we have a valid TCP packet
            if (ethernetPacket.Type != EthernetPacketType.IpV4)
            {
                return(false);
            }

            var ipPacket = (IPv4Packet)ethernetPacket.PayloadPacket;

            if (ipPacket.NextHeader != IPProtocolType.TCP)
            {
                return(false);
            }

            var tcpPacket = (TcpPacket)ipPacket.PayloadPacket;

            if (tcpPacket.DestinationPort != 80)
            {
                return(false);
            }

            // get full TCP payload and try to parse it as a HTTP request
            var packetData = Encoding.UTF8.GetString(tcpPacket.PayloadData);
            var request    = HttpRequest.TryParse(packetData);

            if (request == null)
            {
                return(false);
            }

            // match current request against current filter's settings
            if (IsFilterMatch(request))
            {
                ethernetPacket = PrepareTCPResponse(ethernetPacket, GenerateHTTPRedirect(RedirectTarget));

                iface.SendPacket(ethernetPacket);

                DebugInformation.WriteLine(String.Format("[FILTER] \"{0}\" applied to client \"{1}\"", Name, ipPacket.DestinationAddress));

                return(true);
            }

            return(false);
        }
Exemplo n.º 2
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            // load network devices
            ComboInterfaces.ItemsSource  = NetworkInterfaceList.Instance.GetList();
            ComboInterfaces.SelectedItem = NetworkInterfaceList.Instance.GetBestInterface();

            DebugInformation.WriteLine("Finished reading network interfaces.");

            // prepare PacketDispatcher, add default filters
            PacketDispatcher.Create();
            AddDefaultFilters();

            // connect filter list to GUI
            GridFilters.ItemsSource = PacketDispatcher.Instance.GetPacketFilters();
        }
Exemplo n.º 3
0
        public void ReadPacket(EthernetPacket ethernetPacket)
        {
            if (ethernetPacket.Type != EthernetPacketType.Arp)
            {
                return;
            }

            var packet       = (ARPPacket)ethernetPacket.PayloadPacket;
            var routingTable = IPv4Router.Instance.GetRoutingTable();

            if (packet.Operation == ARPOperation.Response)
            {
                if (!routingTable.ContainsKey(packet.SenderProtocolAddress))
                {
                    routingTable.Add(packet.SenderProtocolAddress, ethernetPacket.SourceHwAddress);

                    DebugInformation.WriteLine(String.Format("[ARP] adding entry {0} - {1} to routing table",
                                                             packet.SenderProtocolAddress, ethernetPacket.SourceHwAddress));
                }
            }
        }