Example #1
0
        static int Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine(PuzzleFileFns.StandardOneParamRequiredErrorMessage);
                return(1);
            }

            var allLines         = File.ReadAllLines(args[0]);
            int payloadStartLine = PuzzleFileFns.GetLinePayloadStartsAt(allLines);
            var payload          = PuzzleFileFns.GetPayloadAsOneLongString(allLines, payloadStartLine);

            Debug.Assert(payload.StartsWith("<~70!<j!!#7a+;"));
            Debug.Assert(payload.EndsWith(":j*\"<<*=Q1C=~>"));
            Debug.Assert(payload.Contains("\n") == false);

            var ipv4PacketsSpan = Ascii85Fns.DecodeAsSpan(payload, 2);
            var packetStream    = new MemoryStream(ipv4PacketsSpan.ToArray());
            var memBuffer       = new MemoryStream();

            foreach (var ipv4Frame in IPv4Fns.IterateFrames(packetStream))
            {
                if (!ipv4Frame.Header.ChecksumOK)
                {
                    continue;
                }

                var udpFrame = UDPFns.DecodeUDP(ipv4Frame.Data);

                if (!PacketFilter(ipv4Frame.Header, udpFrame))
                {
                    continue;
                }

                memBuffer.Write(udpFrame.Data, 0, udpFrame.Data.Length);
            }

            // Debugging:
            // var ipv4frame = IPv4Fns.IterateFrames(payloadStream).Last();

            // System.Console.WriteLine(
            //     UDPFns.UDPToDebugString(
            //         ipv4frame.Header.SourceAddress,
            //         ipv4frame.Header.DestinationAddress,
            //         UDPFns.DecodeUDP(ipv4frame.Data)));

            // var udpPacket = UDPFns.DecodeUDP(ipv4frame.Data);
            // var checksum = UDPFns.UDPChecksum(ipv4frame.Header.SourceAddress, ipv4frame.Header.DestinationAddress, udpPacket);
            // System.Console.WriteLine("Checksum (calc)={0:x4}", checksum);
            memBuffer.Position = 0L;
            Console.WriteLine(Encoding.ASCII.GetString(memBuffer.ToArray()));

            return(0);
        }
Example #2
0
        static bool PacketFilter(IPv4Header ipv4Header, UDPFrame udpFrame)
        {
            if (ipv4Header.ChecksumOK == false ||
                !ipv4Header.SourceAddress.Equals(FilterSourceAddr) ||
                !ipv4Header.DestinationAddress.Equals(FilterDestAddr) ||
                udpFrame.Header.DestinationPort != FilterDestPort)
            {
                return(false);
            }

            return(UDPFns.UDPChecksum(ipv4Header.SourceAddress, ipv4Header.DestinationAddress, udpFrame) == udpFrame.Header.Checksum);
        }