Nous faisons un petit tableau de bord pour récupérer et afficher la liste des serveurs DHCP dans un réseau local, puis obtenir les informations d'étendue telles que les adresses IP utilisées et non utilisées. en utilisant .NET de préférence C#. Comment cela pourrait-il être rendu possible?Récupération de la liste des serveurs DHCP de Windows et des informations de portée de chaque serveur DHCP utilisant .NET
2
A
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
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;
}
}
Salut Ben, j'avais visité ce site auparavant, je voulais juste un peu plus de perspicacité dans ce. Merci quand même!!! –
nbtstat -A MICROSOFT_DHCP_SRV_IP –