Exemplo n.º 1
0
        private void SendDiscover()
        {
            try
            {
                m_IStatusUpdate.UpdateStatus("Assembling DHCP Discover Packet");
                DHCPRequest DhcpRequest = new DHCPRequest();
                AssembleDiscover(ref DhcpRequest);

                string         destHwAddress = "FFFFFFFFFFFF";
                var            dest          = System.Net.NetworkInformation.PhysicalAddress.Parse(destHwAddress);
                EthernetPacket packet        = new EthernetPacket(m_Device.Interface.MacAddress, dest, EthernetPacketType.IpV4);
                packet.Type = EthernetPacketType.IpV4;

                var ipSourceAddress      = System.Net.IPAddress.Parse("0.0.0.0");
                var ipDestinationAddress = System.Net.IPAddress.Parse("255.255.255.255");
                var ipPacket             = new IPv4Packet(ipSourceAddress, ipDestinationAddress);

                UdpPacket udpPacket = new UdpPacket(67, 68);
                byte[]    payload   = StructureToByteArray(DhcpRequest);

                ipPacket.Version = IpVersion.IPv4;

                udpPacket.PayloadData  = payload;
                ipPacket.PayloadPacket = udpPacket;
                packet.PayloadPacket   = ipPacket;

                udpPacket.UpdateUDPChecksum();
                ipPacket.UpdateIPChecksum();

                m_IStatusUpdate.UpdateStatus("Sending DHCP Discover");
                m_Device.SendPacket(packet);
                m_IStatusUpdate.UpdateStatus("Sent DHCP Discover");
            }
            catch (Exception)
            {
                m_IStatusUpdate.UpdateStatus("Failed to send DHCP Discover");
            }
        }
Exemplo n.º 2
0
        //发送ARP广播,返回192.168局域网中其他计算机的ARP相应数据包
        public static ArrayList ARPBroadcast(LivePcapDevice device)
        {
            ArrayList tmpArrayList = new ArrayList();
            PhysicalAddress localMAC = device.Interface.MacAddress;
            //这是我们伪造的一个IP
            IPAddress srcIP = IPAddress.Parse("192.168.3.3");
            String arpFilter = "arp and ether dst " + localMAC.ToString();

            //open the device with 20ms timeout
            device.Open(DeviceMode.Normal, 20);
            device.Filter = arpFilter;
            IPAddress destIP;
            SharpPcap.ARP tmpArp=new ARP();
            //发送65535个数据包耗时30秒,这30秒内到达的数据包由网卡缓存
            for (int i = 0; i < 256; i++)
            {
                for (int j = 0; j < 256; j++)
                {
                    destIP = IPAddress.Parse("192.168." + i.ToString() + "." + j.ToString());
                    //request是Packet类型
                    var request = tmpArp.BuildRequest(destIP, localMAC, srcIP);
                    //发送数据包到网络中
                    device.SendPacket(request);
                }
            }
            DateTime StartTime = DateTime.Now;
            DateTime endTime = StartTime.AddSeconds(5);
            PacketDotNet.ARPPacket arpPacket = null;
            //接收5秒钟数据包,然后闪人
            while (DateTime.Now <= endTime)
            {
                var reply = device.GetNextPacket();
                if (reply == null)
                    continue;
                var packet = PacketDotNet.Packet.ParsePacket(reply);
                arpPacket = PacketDotNet.ARPPacket.GetEncapsulated(packet);
                if (arpPacket == null)
                {
                    continue;
                }
                else
                {
                    //exists判断是否ARP回应包存在重复
                    bool exists = false;
                    foreach (Object obj in tmpArrayList)
                    {
                        ARPPacket tmp=(ARPPacket)obj;
                        if (arpPacket.SenderHardwareAddress==tmp.SenderHardwareAddress)
                        {
                            exists = true;
                            break;
                        }
                    }
                    if (exists == false)
                    {
                        tmpArrayList.Add(arpPacket);
                    }
                }
            }
            device.Close();
            return tmpArrayList;
        }
Exemplo n.º 3
0
        //发送ARP广播,返回192.168局域网中其他计算机的ARP相应数据包
        public static ArrayList ARPBroadcast(LivePcapDevice device)
        {
            ArrayList       tmpArrayList = new ArrayList();
            PhysicalAddress localMAC     = device.Interface.MacAddress;
            //这是我们伪造的一个IP
            IPAddress srcIP     = IPAddress.Parse("192.168.3.3");
            String    arpFilter = "arp and ether dst " + localMAC.ToString();

            //open the device with 20ms timeout
            device.Open(DeviceMode.Normal, 20);
            device.Filter = arpFilter;
            IPAddress destIP;

            SharpPcap.ARP tmpArp = new ARP();
            //发送65535个数据包耗时30秒,这30秒内到达的数据包由网卡缓存
            for (int i = 0; i < 256; i++)
            {
                for (int j = 0; j < 256; j++)
                {
                    destIP = IPAddress.Parse("192.168." + i.ToString() + "." + j.ToString());
                    //request是Packet类型
                    var request = tmpArp.BuildRequest(destIP, localMAC, srcIP);
                    //发送数据包到网络中
                    device.SendPacket(request);
                }
            }
            DateTime StartTime = DateTime.Now;
            DateTime endTime   = StartTime.AddSeconds(5);

            PacketDotNet.ARPPacket arpPacket = null;
            //接收5秒钟数据包,然后闪人
            while (DateTime.Now <= endTime)
            {
                var reply = device.GetNextPacket();
                if (reply == null)
                {
                    continue;
                }
                var packet = PacketDotNet.Packet.ParsePacket(reply);
                arpPacket = PacketDotNet.ARPPacket.GetEncapsulated(packet);
                if (arpPacket == null)
                {
                    continue;
                }
                else
                {
                    //exists判断是否ARP回应包存在重复
                    bool exists = false;
                    foreach (Object obj in tmpArrayList)
                    {
                        ARPPacket tmp = (ARPPacket)obj;
                        if (arpPacket.SenderHardwareAddress == tmp.SenderHardwareAddress)
                        {
                            exists = true;
                            break;
                        }
                    }
                    if (exists == false)
                    {
                        tmpArrayList.Add(arpPacket);
                    }
                }
            }
            device.Close();
            return(tmpArrayList);
        }