下面是我的获取机器名的代码,我还想获取IP和MAC
arp就算了----用过 得循环扫描
nbtstat也算了----用过 得循环扫描
用机器名获取IP ping 也算了。如果机器wins有问题是获取不到的class NetApi
{
[DllImport("Netapi32.dll", EntryPoint = "NetServerEnum")]
public static extern Int32 NetServerEnum(
[MarshalAs(UnmanagedType.LPWStr)] String serverName,
Int32 level,
out IntPtr bufferPtr,
UInt32 prefMaxLen,
ref Int32 entriesRead,
ref Int32 totalEntries,
UInt32 serverType,
[MarshalAs(UnmanagedType.LPWStr)] String domain,
IntPtr handle);
[DllImport("Netapi32.dll", EntryPoint = "NetApiBufferFree")]
public static extern UInt32 NetApiBufferFree(IntPtr buffer);
}
class EnumerateLanMachines
{
public const UInt32 SUCCESS = 0;
public const UInt32 FAIL = 234;
public const UInt32 MAX_PREFERRED_LENGTH = 0xFFFFFFFF;
enum ServerTypes : uint
{
WorkStation = 0x00000001,
Server = 0x00000002
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct MachineInfo
{
[MarshalAs(UnmanagedType.U4)]
public UInt32 platformId;
[MarshalAs(UnmanagedType.LPWStr)]
public String serverName;
}
public enum Platform
{
PLATFORM_ID_DOS = 300,
PLATFORM_ID_OS2 = 400,
PLATFORM_ID_NT = 500,
PLATFORM_ID_OSF = 600,
PLATFORM_ID_VMS = 700
} public void enumerateMachines()
{
IntPtr buffer = new IntPtr();
int totalEntries = 0;
int entriesRead = 0;
int result;
result = NetApi.NetServerEnum(null, 100, out buffer, MAX_PREFERRED_LENGTH, ref entriesRead, ref totalEntries, (uint)ServerTypes.WorkStation, null, IntPtr.Zero); MachineInfo machineInfo; if (result != FAIL)
{
Console.WriteLine("Succeeded!");
Console.WriteLine(entriesRead);
for (int i = 0; i < entriesRead; ++i)
{
machineInfo = (MachineInfo)Marshal.PtrToStructure(buffer, typeof(MachineInfo));
//machines.Add ( machineInfo );
Console.WriteLine(machineInfo.serverName);
buffer = (IntPtr)((ulong)buffer + (ulong)Marshal.SizeOf(machineInfo));
}
NetApi.NetApiBufferFree(buffer);
}
}
} public static void Main()
{
EnumerateLanMachines enumerate = new EnumerateLanMachines();
enumerate.enumerateMachines();
Console.ReadLine();
}求解
arp就算了----用过 得循环扫描
nbtstat也算了----用过 得循环扫描
用机器名获取IP ping 也算了。如果机器wins有问题是获取不到的class NetApi
{
[DllImport("Netapi32.dll", EntryPoint = "NetServerEnum")]
public static extern Int32 NetServerEnum(
[MarshalAs(UnmanagedType.LPWStr)] String serverName,
Int32 level,
out IntPtr bufferPtr,
UInt32 prefMaxLen,
ref Int32 entriesRead,
ref Int32 totalEntries,
UInt32 serverType,
[MarshalAs(UnmanagedType.LPWStr)] String domain,
IntPtr handle);
[DllImport("Netapi32.dll", EntryPoint = "NetApiBufferFree")]
public static extern UInt32 NetApiBufferFree(IntPtr buffer);
}
class EnumerateLanMachines
{
public const UInt32 SUCCESS = 0;
public const UInt32 FAIL = 234;
public const UInt32 MAX_PREFERRED_LENGTH = 0xFFFFFFFF;
enum ServerTypes : uint
{
WorkStation = 0x00000001,
Server = 0x00000002
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct MachineInfo
{
[MarshalAs(UnmanagedType.U4)]
public UInt32 platformId;
[MarshalAs(UnmanagedType.LPWStr)]
public String serverName;
}
public enum Platform
{
PLATFORM_ID_DOS = 300,
PLATFORM_ID_OS2 = 400,
PLATFORM_ID_NT = 500,
PLATFORM_ID_OSF = 600,
PLATFORM_ID_VMS = 700
} public void enumerateMachines()
{
IntPtr buffer = new IntPtr();
int totalEntries = 0;
int entriesRead = 0;
int result;
result = NetApi.NetServerEnum(null, 100, out buffer, MAX_PREFERRED_LENGTH, ref entriesRead, ref totalEntries, (uint)ServerTypes.WorkStation, null, IntPtr.Zero); MachineInfo machineInfo; if (result != FAIL)
{
Console.WriteLine("Succeeded!");
Console.WriteLine(entriesRead);
for (int i = 0; i < entriesRead; ++i)
{
machineInfo = (MachineInfo)Marshal.PtrToStructure(buffer, typeof(MachineInfo));
//machines.Add ( machineInfo );
Console.WriteLine(machineInfo.serverName);
buffer = (IntPtr)((ulong)buffer + (ulong)Marshal.SizeOf(machineInfo));
}
NetApi.NetApiBufferFree(buffer);
}
}
} public static void Main()
{
EnumerateLanMachines enumerate = new EnumerateLanMachines();
enumerate.enumerateMachines();
Console.ReadLine();
}求解
答案满意追加
亲求解哈
请再次留言以便结贴时放分