Exemple #1
0
 private void InfoAndEmit(IContext ctx, ArpPacket request, ArpPacket reply)
 {
     ctx.Warn($"Gratuitous ARP packet {request} has got answer {reply}. Possible problems in IP address assignement.");
     ctx.TryInsert(new ArpGratuitous {
         Request = request, Reply = reply
     });
 }
Exemple #2
0
        public override void Define()
        {
            ArpPacket packet = null;

            When()
            .Match(() => packet, x => BadPadding(x));
            Then()
            .Do(ctx => ctx.Warn($"ARP packet {packet} has bad padding."));
        }
Exemple #3
0
        private void InfoAndEmit(IContext ctx, ArpPacket arp)
        {
            var mapping = new ArpAddressMapping {
                EthAddr = arp.ArpSrcHwMac, IpAddr = arp.ArpSrcProtoIpv4
            };

            ctx.Info($"ARP mapping: {mapping}");
            ctx.TryInsert(mapping);
        }
Exemple #4
0
        public override void Define()
        {
            ArpPacket arp = null;

            When()
            .Match(() => arp);
            Then()
            .Do(ctx => InfoAndEmit(ctx, arp));
        }
Exemple #5
0
        public override void Define()
        {
            ArpPacket request = null;
            ArpPacket reply   = null;

            When()
            .Match(() => request, x => x.Opcode == ArpOpcode.Request && x.IsGratuitous)
            .Match(() => reply, x => x.Opcode == ArpOpcode.Reply, x => x.EthDst == request.EthSrc, x => x.FrameTimeRelative - request.FrameTimeRelative < 1);

            Then()
            .Do(ctx => InfoAndEmit(ctx, request, reply));     //
        }
Exemple #6
0
        public override void Define()
        {
            ArpPacket request = null;

            When()
            .Match <ArpPacket>(() => request, x => x.Opcode == ArpOpcode.Request && !x.IsGratuitous)
            .Not <ArpPacket>(x => x.Opcode == ArpOpcode.Reply, x => x.EthDst == request.EthSrc, x => x.FrameTimeRelative - request.FrameTimeRelative < 1);

            Then()
            .Do(ctx => ctx.TryInsert(new ArpUnanswered {
                Request = request
            }));
        }
Exemple #7
0
        public static ArpPacket Create(System.Func <string, string, string> mapper, string[] values)
        {
            ArpPacket newObj = new ArpPacket();

            newObj._FrameNumber       = mapper.Invoke("frame.number", values[0]).ToInt32();
            newObj._FrameTimeRelative = mapper.Invoke("frame.time_relative", values[1]).ToDouble();
            newObj._EthSrc            = mapper.Invoke("eth.src", values[2]).ToString();
            newObj._EthDst            = mapper.Invoke("eth.dst", values[3]).ToString();
            newObj._ArpOpcode         = mapper.Invoke("arp.opcode", values[4]).ToInt32();
            newObj._ArpSrcHwMac       = mapper.Invoke("arp.src.hw_mac", values[5]).ToString();
            newObj._ArpDstHwMac       = mapper.Invoke("arp.dst.hw_mac", values[6]).ToString();
            newObj._ArpSrcProtoIpv4   = mapper.Invoke("arp.src.proto_ipv4", values[7]).ToString();
            newObj._ArpDstProtoIpv4   = mapper.Invoke("arp.dst.proto_ipv4", values[8]).ToString();
            newObj._EthPadding        = mapper.Invoke("eth.padding", values[9]).ToString();
            return(newObj);
        }
Exemple #8
0
        public override bool Equals(object obj)
        {
            ArpPacket that = obj as ArpPacket;

            return(((((((((((that != null) &&
                            object.Equals(this.FrameNumber, that.FrameNumber)) &&
                           object.Equals(this.FrameTimeRelative, that.FrameTimeRelative)) &&
                          object.Equals(this.EthSrc, that.EthSrc)) &&
                         object.Equals(this.EthDst, that.EthDst)) &&
                        object.Equals(this.ArpOpcode, that.ArpOpcode)) &&
                       object.Equals(this.ArpSrcHwMac, that.ArpSrcHwMac)) &&
                      object.Equals(this.ArpDstHwMac, that.ArpDstHwMac)) &&
                     object.Equals(this.ArpSrcProtoIpv4, that.ArpSrcProtoIpv4)) &&
                    object.Equals(this.ArpDstProtoIpv4, that.ArpDstProtoIpv4)) &&
                   object.Equals(this.EthPadding, that.EthPadding));
        }
Exemple #9
0
 private bool BadPadding(ArpPacket packet)
 {
     return(packet.EthPadding.Any(x => !(x == '0' || x == ':')));
 }