Передано Спасибо большое.Я уже писал с WMI CODER CREATOR, который направил и IPv4routetable следующий код:
private void button1_Click(object sender, EventArgs e)
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_IP4RouteTable");
ListViewItem buf;
foreach (ManagementObject queryObj in searcher.Get())
{
string destination = queryObj["Destination"].ToString();
string mask = queryObj["Mask"].ToString();
string metric = queryObj["Metric1"].ToString();
string interfaceIndex = queryObj["InterfaceIndex"].ToString();
string nexthop = queryObj["NextHop"].ToString();
string protocol =queryObj["Protocol"].ToString();
string type = queryObj["Type"].ToString();
string status;
if (queryObj["Status"]!=null)
{
status = queryObj["Status"].ToString();
}
else
{
status = string.Empty;
}
buf = new ListViewItem(new string[] {destination,mask,metric,interfaceIndex,nexthop,protocol,status,typ});
list_route.Items.Add(buf);
}
}
catch (ManagementException ex)
{
MessageBox.Show("An error occurred while querying for WMI data: " + ex.Message);
}
}
Просто не знаю, в каком классе я нахожу информацию о arp-a, не могу найти в Google.Если кто-то знал, он спрашивал ответ.Если у кого-то есть другие полезные средства, такие как WMI Coder Creator, был бы благодарен.
Я нашел некоторую информацию.О GetIpNetTable, но я не могу использовать эту функцию в приложениях с графическим интерфейсом, чтобы передать результат в просмотр списка.: (
using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Net;
namespace GetIpNetTable
{
class Program
{
/ / The max number of physical addresses.
const int MAXLEN_PHYSADDR = 8;
/ / Define the MIB_IPNETROW structure.
[StructLayout (LayoutKind.Sequential)]
struct MIB_IPNETROW
{
[MarshalAs (UnmanagedType.U4)]
public int dwIndex;
[MarshalAs (UnmanagedType.U4)]
public int dwPhysAddrLen;
[MarshalAs (UnmanagedType.U1)]
public byte mac0;
[MarshalAs (UnmanagedType.U1)]
public byte mac1;
[MarshalAs (UnmanagedType.U1)]
public byte mac2;
[MarshalAs (UnmanagedType.U1)]
public byte mac3;
[MarshalAs (UnmanagedType.U1)]
public byte mac4;
[MarshalAs (UnmanagedType.U1)]
public byte mac5;
[MarshalAs (UnmanagedType.U1)]
public byte mac6;
[MarshalAs (UnmanagedType.U1)]
public byte mac7;
[MarshalAs (UnmanagedType.U4)]
public int dwAddr;
[MarshalAs (UnmanagedType.U4)]
public int dwType;
}
/ / Declare the GetIpNetTable function.
[DllImport ("Iphlpapi.dll")]
[Return: MarshalAs (UnmanagedType.U4)]
static extern int GetIpNetTable (
IntPtr pIpNetTable,
[MarshalAs (UnmanagedType.U4)]
pdwSize ref int,
bool border);
/ / The Insufficient buffer error.
const int ERROR_INSUFFICIENT_BUFFER = 122;
static void Main (string [] args)
{
/ / The number of bytes needed.
bytesNeeded int = 0;
/ / The result from the API call.
int result = GetIpNetTable (IntPtr.Zero, ref bytesNeeded, false);
/ / Call the function, expecting an Insufficient buffer.
if (result! = ERROR_INSUFFICIENT_BUFFER)
{
/ / Throw an exception.
throw new Win32Exception (result);
}
/ / Allocate the memory, do it in a try / finally block, to ensure code
/ / That it is released.
IntPtr buffer = IntPtr.Zero;
/ / Try / finally.
try
{
/ / Allocate the memory.
buffer = Marshal.AllocCoTaskMem (bytesNeeded);
/ / Make the call again. If it did not Succeed, then
/ / Raise an error.
result = GetIpNetTable (buffer, ref bytesNeeded, false);
/ / If the result is not 0 (no error), then throw an exception.
if (result! = 0)
{
/ / Throw an exception.
throw new Win32Exception (result);
}
/ / Now we have the buffer, the have to marshal it. We can read
/ / The first 4 bytes to get the length of the buffer.
int entries = Marshal.ReadInt32 (buffer);
/ / Increment the memory pointer by the size of the int.
IntPtr = new IntPtr currentBuffer (buffer.ToInt64 () +
Marshal.SizeOf (typeof (int)));
/ / Allocate an array of entries.
MIB_IPNETROW [] table = new MIB_IPNETROW [entries]
/ / Cycle through the entries.
for (int index = 0; index <entries; index + +)
{
/ / Call PtrToStructure, getting the information structure.
table [index] = (MIB_IPNETROW) Marshal.PtrToStructure (new
IntPtr (currentBuffer.ToInt64 () + (index *
Marshal.SizeOf (typeof (MIB_IPNETROW )))), typeof (MIB_IPNETROW));
}
for (int index = 0; index <entries; index + +)
{
IPAddress ip = new IPAddress (table [index]. DwAddr);
Console.Write ("IP:" + ip.ToString () + "\ t \ TMAC");
byte b;
b = table [index]. mac0;
if (b <0x10)
{
Console.Write ("0");
}
else
{
Console.Write ("");
}
Console.Write (b.ToString ("X"));
b = table [index]. mac1;
if (b <0x10)
{
Console.Write ("-0");
}
else
{
Console.Write ("-");
}
Console.Write (b.ToString ("X"));
b = table [index]. mac2;
if (b <0x10)
{
Console.Write ("-0");
}
else
{
Console.Write ("-");
}
Console.Write (b.ToString ("X"));
b = table [index]. mac3;
if (b <0x10)
{
Console.Write ("-0");
}
else
{
Console.Write ("-");
}
Console.Write (b.ToString ("X"));
b = table [index]. mac4;
if (b <0x10)
{
Console.Write ("-0");
}
else
{
Console.Write ("-");
}
Console.Write (b.ToString ("X"));
b = table [index]. mac5;
if (b <0x10)
{
Console.Write ("-0");
}
else
{
Console.Write ("-");
}
Console.Write (b.ToString ("X"));
Console.WriteLine ();
}
}
finally
{
/ / Release the elephant.
Marshal.FreeCoTaskMem (buffer);
}
}
}
}