説明ありがとうございます。私はすでに、次のコードを向けるとIPv4routetableているWMI CODERのCREATORで書かれています:
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-の情報がGoogleで見つけることができない見つけるどのクラスにはわかりません。もし誰かが彼が答えを求めているのを知っていたら。誰かがWMI Coder Creatorのような他の役に立つ助けを持っていれば、感謝していました。
いくつかの情報が見つかりました。 GetIpNetTableについてですが、GUIアプリケーションでこの関数を使用して結果をリストビューに渡すことはできません。 :。(
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);
}
}
}
}
申し訳ありませんが、ちょうど私が "ARP -a" についての質問を忘れているのを見ました[GetIpNetTable2機能]を見てみましょう(http://msdn.microsoft.com/en-us/library /aa814420(v=vs.85).aspx)、それがあなたが探しているものかもしれないと確信しています.C#から呼び出すのがどれほど簡単かわかりませんが、WMIの方が簡単かもしれませんが、 –