Esempio n. 1
0
        //adding ARP log
        private void handlerARP(Packet packet)
        {
            byte[] senderMACbyte = packet.Ethernet.Arp.SenderHardwareAddress.ToArray();
            String senderMAC     = (BitConverter.ToString(senderMACbyte)).Replace("-", ":");

            byte[] senderIPbyte = packet.Ethernet.Arp.SenderProtocolAddress.ToArray();
            String senderIP     = "" + senderIPbyte[0] + "." + senderIPbyte[1] + "." + senderIPbyte[2] + "." + senderIPbyte[3];

            logARP log = new logARP(senderIP, senderMAC, timeARP);
            int    key = log.accessMAC.GetHashCode();

            if (hashARP[key] == null)
            {
                addARPline(log);
                hashARP.Add(key, log);
                listMAC.Add(log.accessMAC);
            }
            else
            {
                logARP actual = (logARP)hashARP[key];
                actual.accessIP  = senderIP;
                actual.accessMAC = senderMAC;
                actual.accessTTL = timeARP;
            }

            String targetMAC = PcapDotNet.Core.Extensions.LivePacketDeviceExtensions.GetMacAddress(allDevices[DEV0]).ToString();

            byte[] targetMACbyte = targetMAC.Split(':').Select(x => Convert.ToByte(x, 16)).ToArray();
            String targetIP      = textboxIP1.Text.ToString();

            byte[] targetIPbyte = targetIP.Split('.').Select(x => Convert.ToByte(x, 10)).ToArray();

            byte[] tempIPbyte = packet.Ethernet.Arp.TargetProtocolAddress.ToArray();
            String tempIP     = "" + tempIPbyte[0] + "." + tempIPbyte[1] + "." + tempIPbyte[2] + "." + tempIPbyte[3];

            if (textboxIP1.Text.Equals(tempIP.ToString()))
            {
                if (packet.Ethernet.Arp.Operation.ToString().Equals("Request"))
                {
                    Packet replyPacket = PacketBuilder.Build(
                        DateTime.Now,
                        new EthernetLayer
                    {
                        Source      = new MacAddress(targetMAC),
                        Destination = new MacAddress(senderMAC),
                        EtherType   = EthernetType.Arp
                    },
                        new ArpLayer
                    {
                        ProtocolType          = EthernetType.IpV4,
                        Operation             = ArpOperation.Reply,
                        SenderHardwareAddress = targetMACbyte.AsReadOnly(),
                        SenderProtocolAddress = targetIPbyte.AsReadOnly(),
                        TargetHardwareAddress = senderMACbyte.AsReadOnly(),
                        TargetProtocolAddress = senderIPbyte.AsReadOnly(),
                    });
                    dev0.SendPacket(replyPacket);
                }
            }
        }
Esempio n. 2
0
        //adding ARPlog to ARP GUI table
        private void addARPline(logARP log)
        {
            ListViewItem lineARP = new ListViewItem(log.accessIP);//adding to GUI table

            lineARP.SubItems.Add(log.accessMAC.ToString());
            lineARP.SubItems.Add(log.accessTTL.ToString());
            Invoke(new MethodInvoker(delegate() { tableARP.Items.Add(lineARP); }));
        }
Esempio n. 3
0
 //Function: Return the ARP log of current destination mathich nexthop
 private logARP lookupARP(String nexthop)
 {
     foreach (String actual in listMAC)
     {
         logARP log = (logARP)hashARP[actual.GetHashCode()];
         if (log.accessIP.Equals(nexthop))
         {
             return(log);
         }
     }
     return(null);
 }
Esempio n. 4
0
 public void periodARP(Object source, ElapsedEventArgs e)
 {
     for (int i = listMAC.Count - 1; i >= 0; i--)
     {
         logARP log = (logARP)hashARP[listMAC[i].GetHashCode()];
         if (log.accessTTL > 1)
         {
             log.reduce();
         }
         else
         {
             lock (hashARP) { hashARP.Remove(listMAC[i].GetHashCode()); }
             lock (listMAC) { listMAC.RemoveAt(i); };
         }
     }
 }
Esempio n. 5
0
        private void pinger()
        {
            Route route = findNexthopRoute(textboxARPtarget.Text);

            logARP log = null;

            if (route.Nexthop.Equals("directly connected"))
            {
                log = lookupARP(textboxARPtarget.Text);
            }
            else
            {
                log = lookupARP(route.Nexthop);
            }

            if (log == null)
            {
                requestARP();
            }

            Thread.Sleep(10);

            if (route.Nexthop.Equals("directly connected"))
            {
                log = lookupARP(textboxARPtarget.Text);
            }
            else
            {
                log = lookupARP(route.Nexthop);
            }



            try
            {
                ping.Request(dev0, myMAC1.ToString(), log.accessMAC, textboxIP1.Text, log.accessIP);
            }
            catch (Exception delay)
            {
            }
        }