Imparted 매우 감사드립니다. 나는 이미 감독과 IPv4routetable 다음 코드 한 WMI 코더 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를-A이 구글에서 찾을 수 없습니다. 누군가가 그가 대답을 요구하고 있음을 알고 있었다면. 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 방법 일지 모르지만 나는 결코 보지 못했을 것이다. –