コード例 #1
0
ファイル: Program.cs プロジェクト: dynl04d/Network-Bridge
        private static Packet BuildIcmpPacket(MacAddress SourceMac, MacAddress DestinationMac, IpV4Address SourceIp, IpV4Address CurrentDestination, string packetType)
        {
            EthernetLayer ethernetLayer =
                new EthernetLayer
            {
                Source      = SourceMac,
                Destination = DestinationMac,
                EtherType   = EthernetType.None,   // Will be filled automatically.
            };

            IpV4Layer ipV4Layer =
                new IpV4Layer
            {
                //Source = new IpV4Address("1.2.3.4"),
                //CurrentDestination = new IpV4Address("11.22.33.44"),
                Source             = SourceIp,
                CurrentDestination = CurrentDestination,
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null, // Will be filled automatically.
                Identification     = 123,
                Options            = IpV4Options.None,
                Protocol           = null, // Will be filled automatically.
                Ttl           = 100,
                TypeOfService = 0,
            };

            IcmpEchoLayer      icmpLayer  = null;
            IcmpEchoReplyLayer icmpRLayer = null;

            PacketBuilder builder = null;

            if (packetType.Equals("REQUEST"))
            {
                Console.WriteLine("Request");
                icmpLayer =
                    new IcmpEchoLayer
                {
                    Checksum       = null, // Will be filled automatically.
                    Identifier     = 456,
                    SequenceNumber = 800,
                };
                builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);
            }
            else
            {
                Console.WriteLine("Reply");
                icmpRLayer =
                    new IcmpEchoReplyLayer
                {
                    Checksum       = null, // Will be filled automatically.
                    Identifier     = 456,
                    SequenceNumber = 800,
                };
                builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpRLayer);
            }


            return(builder.Build(DateTime.Now));
        }
コード例 #2
0
        public void SendIcmpEchoReply(IpV4Address TargetIP, MacAddress TargetMac, IcmpDatagram icmpRequest)
        {
            EthernetLayer ethernetLayer =
                new EthernetLayer
            {
                Source      = _adapter.MAC,
                Destination = TargetMac,
                EtherType   = EthernetType.None,   // Will be filled automatically.
            };

            VLanTaggedFrameLayer vlanLayer =
                new VLanTaggedFrameLayer
            {
                PriorityCodePoint        = ClassOfService.BestEffort,
                CanonicalFormatIndicator = false,
                VLanIdentifier           = _adapter.VLAN,
                EtherType = EthernetType.None,
            };

            IpV4Layer ipV4Layer =
                new IpV4Layer
            {
                Source             = _adapter.IP,
                CurrentDestination = TargetIP,
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null, // Will be filled automatically.
                Identification     = 123,
                Options            = IpV4Options.None,
                Protocol           = null, // Will be filled automatically.
                Ttl           = 100,
                TypeOfService = 0,
            };

            IcmpEchoReplyLayer icmpReplyLayer = new IcmpEchoReplyLayer
            {
                Identifier     = (ushort)((icmpRequest.Variable >> 16) & 0xFFFF),
                SequenceNumber = (ushort)(icmpRequest.Variable & 0xFFFF),
            };

            PayloadLayer payloadLayer = new PayloadLayer()
            {
                Data = icmpRequest.Payload
            };


            if (_adapter.VLAN > 1)
            {
                VirtualNetwork.Instance.SendPacket(PacketBuilder.Build(DateTime.Now, ethernetLayer, vlanLayer, ipV4Layer, icmpReplyLayer, payloadLayer));
            }
            else
            {
                VirtualNetwork.Instance.SendPacket(PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, icmpReplyLayer, payloadLayer));
            }

            VirtualNetwork.Instance.PostTraceMessage("ICMP Reply: " + TargetIP.ToString());
        }
コード例 #3
0
ファイル: Ping.cs プロジェクト: HalfDeadPie/Software-router
        public void handler(Packet packet, PacketCommunicator device)
        {
            //received ping request
            if (packet.Ethernet.IpV4.Icmp.MessageTypeAndCode.ToString().Equals("Echo"))
            {
                PacketCommunicator dev    = device;
                String             srcMAC = packet.Ethernet.Destination.ToString();
                String             dstMAC = packet.Ethernet.Source.ToString();
                String             srcIP  = packet.Ethernet.IpV4.Destination.ToString();
                String             dstIP  = packet.Ethernet.IpV4.Source.ToString();

                EthernetLayer ethernetLayer =
                    new EthernetLayer
                {
                    Source      = new MacAddress(srcMAC),
                    Destination = new MacAddress(dstMAC),
                    EtherType   = EthernetType.None, // Will be filled automatically.
                };

                IpV4Layer ipV4Layer =
                    new IpV4Layer
                {
                    Source             = new IpV4Address(srcIP),
                    CurrentDestination = new IpV4Address(dstIP),
                    Fragmentation      = IpV4Fragmentation.None,
                    HeaderChecksum     = null, // Will be filled automatically.
                    Identification     = 123,
                    Options            = IpV4Options.None,
                    Protocol           = null, // Will be filled automatically.
                    Ttl           = 100,
                    TypeOfService = 0,
                };


                IcmpIdentifiedDatagram icmp      = (IcmpIdentifiedDatagram)packet.Ethernet.IpV4.Icmp;
                IcmpEchoReplyLayer     icmpLayer =
                    new IcmpEchoReplyLayer
                {
                    Checksum       = null,            // Will be filled automatically.
                    SequenceNumber = icmp.SequenceNumber,
                    Identifier     = icmp.Identifier, //switchID
                };

                PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

                //Packet EchoReplyPacket =  builder.Build(DateTime.Now);
                dev.SendPacket(builder.Build(DateTime.Now));
            }
            //received ping response
            else if (packet.Ethernet.IpV4.Icmp.MessageTypeAndCode.ToString().Equals("EchoReply"))
            {
                MessageBox.Show("Ping Reply!");
            }
        }