Pergunta

Estou tentando criar scripts/serviços que permitam acordar PCs em um domínio do Windows via WOL. Agora, quero dar ao usuário a opção de selecionar um contêiner de anúncios como ponto de partida para o acordar de PCs contidos. Meu pensamento inicial é usar o DHCP como um repositório para consultar endereços MAC, dados os nomes de host (que posso facilmente puxar o suficiente do AD, dado o contêiner).

Existe uma maneira de consultar programaticamente o serviço/servidor DHCP, passando nomes de host e recuperar os endereços MAC associados?

Ou existe uma maneira melhor/mais fácil de resolver meu problema?

Foi útil?

Solução

Tentar dhcpexim.exe da Microsoft.

Ou, se você preferir usar Pure C. Dhcpenumsubnetclientsv4

Outras dicas

Sem problemas; Como todas as máquinas estão em seu domínio, você pode montar um VBScript que receberá o (s) macaddress (s) da máquina local e armazená -lo como um atributo do objeto de computador no Active Directory.

Aqui está um rápido truque sobre como fazer isso (salve isso como um arquivo .vbs):

Option Explicit

Const ADS_PROPERTY_UPDATE = 2
Const COMPUTERLOCATION = "ou=Member Servers,dc=yourdomain,dc=com"
Const ATTRIBUTETOUSE = "otherTelephone"

Dim wshNetwork, strComputerName
Set wshNetwork = WScript.CreateObject("WScript.Network")
strComputerName = wshNetwork.ComputerName

Dim objWMIService, colNetCards, objComputer, objNetCard
Set objWMIService = GetObject("winmgmts:\\" & strComputerName & "\root\cimv2")
Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
Set objComputer = GetObject("LDAP://cn=" & strComputerName & "," & COMPUTERLOCATION) 
For Each objNetCard in colNetCards
    objComputer.PutEx ADS_PROPERTY_APPEND, ATTRIBUTETOUSE, Array(objNetCard.MACAddress)
    objComputer.SetInfo
Next

Como seus clientes não estão todos nos "servidores membros" ou acima, você precisará modificar o script acima para incluir uma pesquisa de diretório para o strComputerName pegue o COMPUTERLOCATION.

Quando você tiver um script de trabalho, peça ao seu administrador de domínio para colocar o script como um script de inicialização que direciona os computadores que você precisa monitorar; Dessa forma, ele será executado sempre que um computador inicializa. Você também pode executar o script como uma tarefa programada para obter seus dados de qualquer cliente que não seja reiniciado ou use Psexec Ou de alguma outra maneira que você possa pensar para obter os dados imediatamente. Ou você pode reescrever o script inteiramente para conectar -se remoto a todas as suas máquinas e obter os dados dessa maneira (o que pode não ser possível devido a firewalls locais). Ou você pode escrever um pequeno aplicativo de console .NET que faz a mesma coisa, depende de você ...

Além disso, embora exista um networkAddress-Attribute definido para objetos de computador; Por padrão, o próprio objeto de computador não tem acesso para gravar nesta propriedade. Porque start up-scripts são executados no contexto do SYSTEM conta na máquina em particular, o mais fácil é usar um atributo que o objeto de computador (SELF) tem acesso a gravar. o otherTelephone-atribute é multivalualizado e parte do Conjunto de propriedades de informação pessoal a que todos os objetos de computador têm acesso por padrão por padrão. Se você quiser usar o networkAddress-Atributo Você precisa definir acesso explícito a esse atributo para todos os seus computadores.

Além disso, você precisa ter em mente que armazenar o endereço MAC no Active Directory significa que todos os usuários em seu domínio terão acesso a ele, o que, por sua vez, pode (dependendo do seu ambiente) representar um pequeno risco de segurança.

Para fazer isso da maneira que a rede faz.

Agarrar SharppCap (Wrapper PCAP para C#) e WinPCap (Windows) ou libpcap (*nix). Escreva um aplicativo que crie pacotes SNMP para consultar a tabela ARP no roteador.

Nota: A tabela ARP (Protocolo de Resolução de Endereço) é a tabela que contém o mapeamento do endereço IP no endereço MAC.

Eu tenho pensado em implementar um exemplo que faz isso ultimamente, mas ainda não tenho um a mostrar. Depois de fazer, garantirei que ele seja adicionado aos exemplos do SharppCap encontrados na árvore de origem do projeto.

Isso é um pouco maluco, parece que não há como consultar programaticamente o servidor DHCP. Obrigado Cottak por fazer a pergunta. Entendo que o protocolo DHCP não tem essa consulta, mas achei que Mayb o executável da Microsoft poderia ter de alguma maneira que você possa abordá -lo na linha de comando. Não ouvi ninguém em qualquer lugar dizer que não existe esse caso, mas deve ser assim.

Uau, espere um minuto ... acho que encontrei o que estamos procurando: netsh. cf:

http://social.technet.microsoft.com/forums/en/itcg/thread/afb4be16-09bd-4260-b515-8323d85d4ccb

Onde diz que se você abrir um prompt de comando no servidor DHCP, poderá executar este comando:

Escopo do servidor Netsh DHCP 192.168.1.0 Mostrar clientes

e obtenha um relatório como este:

10.10.98.53-255.255.255.0 -00-0C-29-02-A4-09-Nunca expira -d 10.10.98.54-255.255.255.0-00-22-19-10-29-75 -1/21/2012 8 : 39: 25 AM -D

Yippeee! Obrigado pelo tópico !! Se não fosse por este, eu teria restringido minha pesquisa a Technet Adn descobriu que um.

Você não pode fazer isso com o DHCP. O DHCP atribui IP do Mac, não o contrário. O ARP é o que converte o IP em Mac, mas é a própria máquina que responde solicitações do ARP, por isso, se estiver obviamente não vai responder ...

Sugiro que você armazene o Mac no seu anúncio diretamente (acho que o anúncio suporta atributos personalizados?)

Você precisa usar o ARP para obter um endereço MAC e fazê -lo em C é um processo longo.

Mac endereços são codificados, portanto, se você tiver x computadores, obtenha endereços X Mac e amarre -os ao anúncio.

Observe que o computador terá que estar ligado para solicitar seu endereço MAC.

Encontrando o endereço MAC do endereço IP

Sim, se preocupe com isso, você pode extrair essas informações diretamente do DHCP se o PC tiver um contrato.

Sabe como você clica com o botão direito do mouse e adiciona uma reserva no DHCP?

Procure no DHCP o 'ID exclusivo'. É o endereço MAC, sem os dois pontos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top