C# Получение Ip host mac локальной сети

93
12 февраля 2021, 06:10

Нужно вывести все айдпи,хосты и мак адреса всей локальной сети.

Проблема в том что выдает такую ошибку

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Net;
using System.Runtime.InteropServices;
using System.Threading;
using System.Net.Sockets;
using System.Globalization;
using System.IO;

namespace WpfApp
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        [DllImport("iphlpapi.dll", ExactSpelling = true)]
        public static extern int SendARP(int destIp, int srcIP, byte[] macAddr, ref uint physicalAddrLen);
        List<TableHost> _host = new List<TableHost>();
        string hostname = "";
        IPHostEntry entry;
        string[] ipToString = new string[4];
        public MainWindow()
        {
            InitializeComponent();

            String host = System.Net.Dns.GetHostName();
            // Получение ip-адреса.
            System.Net.IPAddress ip = System.Net.Dns.GetHostByName(host).AddressList[0];

        }

        //System.Net.IPAddress ip = System.Net.Dns.GetHostByName(host).AddressList[0];
        private void LL_Click(object sender, RoutedEventArgs e)
        {

            int i = int.Parse(ipToString[0]);
            int j = int.Parse(ipToString[1]);
            {
                for (int k = 0; k < 6; k++)
                {
                    for (int m = 0; m < 254; m++)
                    {
                        //Запускаем проверку в новом потоке
                        Thread _thread = new Thread(() => GetInform(string.Format("{0}.{1}.{2}.{3}", i.ToString(), j.ToString(), k.ToString(), m.ToString())));
                        _thread.Start();
                    }
                }
            }

        }

        private void GetInform(string textName)
        {
            string IP_Address = "";
            string HostName = "";
            string MacAddress = "";
            try
            {
                //Проверяем существует ли IP
                entry = Dns.GetHostEntry(textName);
                foreach (IPAddress a in entry.AddressList)
                {
                    IP_Address = a.ToString();
                    break;
                }
                //Получаем HostName
                HostName = entry.HostName;
                //Получаем Mac-address
                IPAddress dst = IPAddress.Parse(textName);
                byte[] macAddr = new byte[6];
                uint macAddrLen = (uint)macAddr.Length;
                if (SendARP(BitConverter.ToInt32(dst.GetAddressBytes(), 0), 0, macAddr, ref macAddrLen) != 0)
                    throw new InvalidOperationException("SendARP failed.");
                string[] str = new string[(int)macAddrLen];
                for (int i = 0; i < macAddrLen; i++)
                    str[i] = macAddr[i].ToString("x2");
                MacAddress = string.Join(":", str);
                //Далее, если всё успешно, добавляем все данные в список, после чего выводим всё в ListView
                Dispatcher.Invoke(new Action(() =>
                {
                    _host.Add(new TableHost() { ipAdress = IP_Address, nameComputer = HostName, MacAdress = MacAddress });
                    ListIP.ItemsSource = null;
                    ListIP.ItemsSource = _host;
                }));
            }
            catch { }
        }
    }
        class TableHost
        {
            public string ipAdress { get; set; }
            public string nameComputer { get; set; }
            public string MacAdress { get; set; }
        }

}

Проект Скачать

Answer 1

Добавил вот такое

public MainWindow() 
        { 
            InitializeComponent(); 
 
 
            String host = System.Net.Dns.GetHostName(); 
            // Получение ip-адреса. 
            System.Net.IPAddress ip = System.Net.Dns.GetHostByName(host).AddressList[0]; 
            
            ipToString = ip.ToString().Split('.'); 
            
 
 
        }

READ ALSO
Добавление данных в DataGridView. Автоинкремент

Добавление данных в DataGridView. Автоинкремент

В базе данных (MS Access) таблица с двумя столбцами: Код и НазваниеКод на автоинкременте

88
Как писать unit тесты на класс работающий с файловой системой?

Как писать unit тесты на класс работающий с файловой системой?

У меня есть класс который работает с директориями и файламиК примеру в нем есть конструкции которые :

86