예제 #1
0
        protected override int Execute()
        {
            var config = FindConfig();

            if (config.Selected.IPAddress == null)
            {
                return(WriteError("No IP address specified"));
            }

            WriteDebug($"Target IP address is {config.Selected.IPAddress}");
            WriteDebug();

            try
            {
                var mac    = ExecuteDirect(config.Selected.IPAddressRaw);
                var strmac = EncodingConverter.ByteArrayToHexDump(mac, ":", -1, string.Empty, true);
                return(WriteInfoOutput(strmac, $"The MAC address of {config.Selected.IPAddress} is {strmac}"));
            }
            catch (TaskException)
            {
                throw;
            }
            catch (Exception e)
            {
                return(WriteError($"An error occured while sending ARP package: {e.Message}", e));
            }
        }
예제 #2
0
        private void SendWOL(byte[] macaddr)
        {
            var packet = new List <byte>();

            for (var i = 0; i < 6; i++)
            {
                packet.Add(0xFF);
            }
            for (var i = 0; i < 16; i++)
            {
                packet.AddRange(macaddr);
            }

            WriteDebug($"Sending UDP package to [{IPAddress.Broadcast}]:{42} with data\n{EncodingConverter.ByteArrayToHexDump(packet, ":", 6, "", true)}");
            WriteDebug();

            using (var client = new UdpClient())
            {
                client.Connect(IPAddress.Broadcast, 42);
                client.Send(packet.ToArray(), packet.Count);
                client.Close();
            }
        }
예제 #3
0
        private void SendWOL(byte[] macaddr, IPAddress ipaddr)
        {
            var packet = new List <byte>();

            for (var i = 0; i < 6; i++)
            {
                packet.Add(0xFF);
            }
            for (var i = 0; i < 16; i++)
            {
                packet.AddRange(macaddr);
            }

            WriteDebug($"Sending UDP package to [{IPAddress.Broadcast}]:{42} with data\n{EncodingConverter.ByteArrayToHexDump(packet, ":", 6, "", true)}");
            WriteDebug();

            using (var client = new UdpClient())
            {
                client.Connect(IPAddress.Broadcast, 42);
                client.Send(packet.ToArray(), packet.Count);
                client.Close();
            }

            if (ipaddr != null && ipaddr.AddressFamily == AddressFamily.InterNetwork)
            {
                WriteDebug($"Trying to determine the broadcast adress for [{ipaddr}] in all available adapters");
                WriteDebug();

                foreach (var iface in NetworkInterface.GetAllNetworkInterfaces().Where(p => p.NetworkInterfaceType != NetworkInterfaceType.Loopback).OrderBy(p => p.OperationalStatus))
                {
                    var anymatch = false;
                    foreach (var ipinfo in iface.GetIPProperties().UnicastAddresses.AsEnumerable().Where(p => p.Address.AddressFamily == AddressFamily.InterNetwork))
                    {
                        if (ipaddr.IsPartOfSubnet(ipinfo.Address, ipinfo.IPv4Mask))
                        {
                            WriteDebug($"Found matching subnet [{ipinfo.Address}|{ipinfo.IPv4Mask}] in adapter \"{iface.Name}\"");
                            WriteDebug();

                            anymatch = true;

                            var broadcast = ipinfo.Address.GetBroadcastAddress(ipinfo.IPv4Mask);
                            if (broadcast == null)
                            {
                                continue;
                            }

                            WriteDebug($"Sending UDP package to [{broadcast}]:{42} with data\n{EncodingConverter.ByteArrayToHexDump(packet, ":", 6, "", true)}");
                            WriteDebug();

                            using (var client = new UdpClient())
                            {
                                client.Connect(broadcast, 42);
                                client.Send(packet.ToArray(), packet.Count);
                                client.Close();
                            }
                        }
                    }
                    if (!anymatch)
                    {
                        WriteDebug($"Found no matching subnet in adapter \"{iface.Name}\"");
                        WriteDebug();
                    }
                }
            }
        }