Запросы сервера DHCP в C#

Это дизайном. Раздел system.webServer по существу определяет сам IIS. Если Вы, Вас ни с чем не оставят. В applicationHost.config у Вас должно быть что-то вроде этого:

        
            
            
            
            
            
            
            
            
            
            ...

Заметьте lockItem свойства. Поскольку существуют 1 или более объектов блокировки, бросит нарушение блокировки.

Так, или необходимо конкретно удалить просто объекты, которые Вы не хотите от web.config, или если действительно необходимо очистить их всех и добавить назад, что собственные, затем в applicationHost.config удаляют lockItem = "верный" на каждом из тех элементов и удостоверяются, что добавили достаточно из них назад так, чтобы веб-сервер на самом деле работал.

Править

(Добавленная дополнительная информация от Daniel, на его запрос. (Scott))

Вот то, что я сделал на основе того, что сказал Scott:

Открытый applicationHost.config в %windir %\system32\inetsrv\config. Обратите внимание, что в Windows Server 2008 на 64 бита, необходимо будет отредактировать файл с редактором на 64 бита (собственный Блокнот сделает, но Блокнот ++ не сможет найти файл). Посмотрите здесь для получения дополнительной информации об этом.

В элементе измените атрибут lockItem на всех модулях ко лжи.

В web.config файле моего веб-приложения, затем смог сделать следующее:


   
      
   

Конечно, как Scott указывает, это означает, что нет никакого оставленного веб-сервера, таким образом, вот минимальный набор модулей, я должен был получить свой материал, выполняющий снова (YMMV):












Кроме того, для любого заинтересованного, вот предыстория относительно того, почему я делаю это.

0
задан 17 February 2015 в 21:03
5 ответов

Существует только собственный win32 api к dhcp серверу. Таким образом, у Вас будет к pinvoke он. Вот является управление сервером DHCP API. Здесь можно найти образцы использования части этого API.

2
ответ дан 4 December 2019 в 15:07

Соединитесь с сервером с помощью SSH и попросите и синтаксический анализ /var/lib/dhcpd/dhcpd.leases.

0
ответ дан 4 December 2019 в 15:07

Серверы DHCP Microsoft могут контролироваться с помощью SNMP. Консультируйтесь с DHCP MS MIB, чтобы видеть, включает ли он информацию, Вы ищете.

0
ответ дан 4 December 2019 в 15:07

Необходимо смочь отослать запросы ARP наверняка. То, что можно сделать, является ARP весь дюйм/с в сети один за другим, и посмотрите, кто отвечает.

0
ответ дан 4 December 2019 в 15:07
//http://www.apachejava.blogspot.com


using System;

using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.ComponentModel; using System.Xml; using System.Net;

namespace DHCPTry {

public struct CUSTOM_CLIENT_INFO
{
    public string ClientName;
    public string IpAddress;
    public string MacAddress;
}

[StructLayout(LayoutKind.Sequential)]
public struct DHCP_CLIENT_INFO_ARRAY
{
    public uint NumElements;
    public IntPtr Clients;
}

[StructLayout(LayoutKind.Sequential)]
public struct DHCP_CLIENT_UID
{
    public uint DataLength;
    public IntPtr Data;
}

[StructLayout(LayoutKind.Sequential)]
public struct DATE_TIME
{
    public uint dwLowDateTime;
    public uint dwHighDateTime;

    public DateTime Convert()
    {
        if (dwHighDateTime == 0 && dwLowDateTime == 0)
        {
            return DateTime.MinValue;
        }
        if (dwHighDateTime == int.MaxValue && dwLowDateTime == UInt32.MaxValue)
        {
            return DateTime.MaxValue;
        }
        return DateTime.FromFileTime((((long)dwHighDateTime) << 32) | (UInt32)dwLowDateTime);
    }
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct DHCP_HOST_INFO
{
    public uint IpAddress;
    public string NetBiosName;
    public string HostName;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct DHCP_CLIENT_INFO
{
    public uint ClientIpAddress;
    public uint SubnetMask;
    public DHCP_CLIENT_UID ClientHardwareAddress; //no pointer -> structure !!
    [MarshalAs(UnmanagedType.LPWStr)]
    public string ClientName;
    [MarshalAs(UnmanagedType.LPWStr)]
    public string ClientComment;
    public DATE_TIME ClientLeaseExpires; //no pointer -> structure !!
    public DHCP_HOST_INFO OwnerHost; //no pointer -> structure
}

class Program
{
    [DllImport("dhcpsapi.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern uint DhcpEnumSubnetClients(
        string ServerIpAddress,
        uint SubnetAddress,
        ref uint ResumeHandle,
        uint PreferredMaximum,
        out IntPtr ClientInfo,
        ref uint ElementsRead,
        ref uint ElementsTotal
    );

    static void Main()
    {
        try
        {
            enum_clients("192.168.3.1", "192.168.3.0");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        Console.ReadLine();
    }

    static void enum_clients(string Server, string Subnet)
    {
        string ServerIpAddress = Server;
        uint Response = 0;
        uint SubnetMask = StringIPAddressToUInt32(Subnet);
        IntPtr info_array_ptr;
        uint ResumeHandle = 0;
        uint nr_clients_read = 0;
        uint nr_clients_total = 0;

        Response = DhcpEnumSubnetClients(ServerIpAddress, SubnetMask, ref ResumeHandle,
           65536, out info_array_ptr, ref nr_clients_read, ref nr_clients_total);
        DHCP_CLIENT_INFO_ARRAY clients = (DHCP_CLIENT_INFO_ARRAY)Marshal.PtrToStructure(info_array_ptr, typeof(DHCP_CLIENT_INFO_ARRAY));
        Console.WriteLine("NumElements{0}",clients.NumElements.ToString());
        int size = (int)clients.NumElements;
        IntPtr[] ptr_array = new IntPtr[size];
        IntPtr current = clients.Clients;
        for (int i = 0; i < size; i++)
        {
            Console.WriteLine("{0}", i);
            ptr_array[i] = Marshal.ReadIntPtr(current);
            current = (IntPtr)((int)current + (int)Marshal.SizeOf(typeof(IntPtr)));
        }
        CUSTOM_CLIENT_INFO[] clients_array = new CUSTOM_CLIENT_INFO[size];

        for (int i = 0; i < size; i++)
        {
            DHCP_CLIENT_INFO curr_element = (DHCP_CLIENT_INFO)Marshal.PtrToStructure(ptr_array[i], typeof(DHCP_CLIENT_INFO));
            clients_array[i].IpAddress = UInt32IPAddressToString(curr_element.ClientIpAddress);
            clients_array[i].ClientName = curr_element.ClientName;
            Console.WriteLine("Client name {0}", clients_array[i].ClientName);
            clients_array[i].MacAddress = String.Format("{0:x2}-{1:x2}-{2:x2}-{3:x2}-{4:x2}-{5:x2}",
                Marshal.ReadByte(curr_element.ClientHardwareAddress.Data),
                Marshal.ReadByte(curr_element.ClientHardwareAddress.Data, 1),
                Marshal.ReadByte(curr_element.ClientHardwareAddress.Data, 2),
                Marshal.ReadByte(curr_element.ClientHardwareAddress.Data, 3),
                Marshal.ReadByte(curr_element.ClientHardwareAddress.Data, 4),
                Marshal.ReadByte(curr_element.ClientHardwareAddress.Data, 5));
            Console.WriteLine("Client MAC {0}", UInt32IPAddressToString(curr_element.ClientIpAddress));
            //This section will throw an AccessViolationException
             //Marshal.DestroyStructure(current, typeof(DHCP_CLIENT_INFO));
            // current = (IntPtr)((int)current + (int)Marshal.SizeOf(curr_element));
            //Replace with:
            //Marshal.DestroyStructure(ptr_array[i], typeof(DHCP_CLIENT_INFO));
        }
      }

    public static uint StringIPAddressToUInt32(string ip_string)
    {
        IPAddress IpA = System.Net.IPAddress.Parse(ip_string);
        byte[] ip_bytes = IpA.GetAddressBytes();
        uint ip_uint = (uint)ip_bytes[0] << 24;
        ip_uint += (uint)ip_bytes[1] << 16;
        ip_uint += (uint)ip_bytes[2] << 8;
        ip_uint += (uint)ip_bytes[3];
        return ip_uint;
    }

    public static string UInt32IPAddressToString(uint ipAddress)
    {
        IPAddress ipA = new IPAddress(ipAddress);
        string[] sIp = ipA.ToString().Split('.');

        return sIp[3] + "." + sIp[2] + "." + sIp[1] + "." + sIp[0];
    }



}

}

0
ответ дан 4 December 2019 в 15:07

Теги

Похожие вопросы