2010-02-08 18 views

Répondre

0

J'ai essayé de faire quelque chose de similaire une fois (avec Windows 2003) et j'ai constaté qu'il n'y avait aucun objet/classe .net pour un serveur DHCP. J'ai trouvé cette http://bytes.com/topic/net/answers/574937-managing-dhcp-servers-using-c-another-net-lang mais c'était au-delà de mon niveau de codage ..

Bonne chance

+0

Salut Ben, j'avais visité ce site auparavant, je voulais juste un peu plus de perspicacité dans ce. Merci quand même!!! –

+0

nbtstat -A MICROSOFT_DHCP_SRV_IP –

0

Une excellente bibliothèque de fonctions DHCP - DYNAMIC HOST CONFIGURATION PROTOCOL WEB SERVICES by Jason Rupard

Il n'a pas l'énumération des serveurs DHCP là-dedans, donc J'ai montré comment le faire ci-dessous. Tout ce dont vous avez besoin devrait déjà être là.

[DllImport("dhcpsapi.dll", CharSet = CharSet.Unicode)] 
internal static extern UInt32 DhcpEnumServers(
    UInt32 Flags, // Should be 0 
    IntPtr IdInfo, // Should be null 
    out IntPtr Servers, 
    IntPtr CallbackFn, // Should be null 
    IntPtr CallbackData // Should be null 
    ); 

[DllImport("dhcpsapi.dll")] 
internal static extern void DhcpRpcFreeMemory(IntPtr BuffPtr); 

[StructLayoutAttribute(LayoutKind.Sequential)] 
public struct DHCP_SERVER_INFO_ARRAY 
{ 
    public UInt32 Flags; 
    public UInt32 NumElements; 
    public IntPtr Servers; 
} 

[StructLayoutAttribute(LayoutKind.Sequential)] 
public struct DHCP_SERVER_INFO 
{ 
    public UInt32 Version; 
    [MarshalAsAttribute(UnmanagedType.LPWStr)] 
    public string ServerName; 
    public UInt32 ServerAddress; 
    public UInt32 Flags; 
    public UInt32 State; 
    [MarshalAsAttribute(UnmanagedType.LPWStr)] 
    public string DsLocation; 
    public UInt32 DsLocType; 
} 

public class DhcpServer 
{ 
    public string Name; 
    public DhcpIpAddress IpAddress; 
    public string AdLocation; 

    public static List<DhcpServer> EnumAll() 
    { 
     var servers = new List<DhcpServer>(); 
     IntPtr retPtr; 
     var response = NativeMethods.DhcpEnumServers(0, IntPtr.Zero, out retPtr, IntPtr.Zero, IntPtr.Zero); 

     if (response != 0) 
     { 
      if (retPtr != IntPtr.Zero) 
      { 
       NativeMethods.DhcpRpcFreeMemory(retPtr); 
      } 
      throw new DhcpException(response); 
     } 
     var nativeArray = (DHCP_SERVER_INFO_ARRAY) Marshal.PtrToStructure(retPtr, typeof (DHCP_SERVER_INFO_ARRAY)); 
     var current = nativeArray.Servers; 
     for (var i = 0; i < nativeArray.NumElements; ++i) 
     { 
      var nativeClient = (DHCP_SERVER_INFO) Marshal.PtrToStructure(current, typeof (DHCP_SERVER_INFO)); 
      servers.Add(ConvertFromNative(nativeClient)); 
      current = (IntPtr) ((int) current + Marshal.SizeOf(typeof(DHCP_SERVER_INFO))); 
     } 

     NativeMethods.DhcpRpcFreeMemory(retPtr); 
     return servers; 

    } 

    private static DhcpServer ConvertFromNative(DHCP_SERVER_INFO nativeServer) 
    { 
     var server = new DhcpServer 
         { 
          IpAddress = new DhcpIpAddress(nativeServer.ServerAddress), 
          Name = nativeServer.ServerName, 
          AdLocation = nativeServer.DsLocation 
         }; 
     return server; 
    } 
}