Windows DHCP Server - nhận thông báo khi thiết bị không tham gia AD nhận địa chỉ IP


15

PHONG CÁCH

Để đơn giản hóa điều này xuống ví dụ đơn giản nhất:

Tôi có một DC tiêu chuẩn Windows 2008 R2 với vai trò máy chủ DHCP. Nó cung cấp IP thông qua các phạm vi IPv4 khác nhau, không có vấn đề ở đó.

Tôi thích gì

Tôi muốn một cách để tạo một mục thông báo / sự kiện / tương tự bất cứ khi nào một thiết bị được thuê địa chỉ DHCP và thiết bị đó KHÔNG phải là một máy tính gia nhập miền trong Active Directory. Nó không quan trọng với tôi cho dù đó là Powershell tùy chỉnh, v.v.

Dòng dưới cùng = Tôi muốn có một cách để biết khi nào các thiết bị không thuộc miền có trên mạng mà không sử dụng 802.1X vào lúc này. Tôi biết điều này sẽ không chiếm tài khoản cho các thiết bị IP tĩnh. Tôi có phần mềm giám sát sẽ quét mạng và tìm thiết bị, nhưng nó không hoàn toàn chi tiết.

NGHIÊN CỨU NGHIÊN CỨU / LỰA CHỌN

Tôi không thấy bất kỳ khả năng nào như vậy với việc đăng nhập tích hợp.

Có, tôi biết về 802.1X và có khả năng triển khai lâu dài tại địa điểm này nhưng chúng tôi cách một dự án như thế một thời gian và trong khi điều đó sẽ giải quyết các vấn đề xác thực mạng, điều này vẫn hữu ích với tôi bên ngoài trong số các mục tiêu 802.1X.

Tôi đã tìm kiếm một số bit script, v.v. có thể chứng minh là hữu ích nhưng những điều tôi tìm thấy khiến tôi tin rằng google-fu của tôi đang làm tôi thất vọng vào lúc này.

Tôi tin rằng logic dưới đây là âm thanh ( giả sử không có một số giải pháp hiện có ):

  1. Thiết bị nhận địa chỉ DHCP
  2. Mục nhật ký sự kiện được ghi lại (ID sự kiện 10 trong nhật ký kiểm toán DHCP sẽ hoạt động (vì hợp đồng thuê mới là điều tôi quan tâm nhất, không phải gia hạn): http://technet.microsoft.com/en-us/l Library /dd759178.aspx )
  3. Tại thời điểm này, một kịch bản thuộc loại nào đó có thể sẽ phải đảm nhận cho các "BƯỚC" còn lại bên dưới.
  4. Bằng cách nào đó truy vấn nhật ký DHCP này cho các ID 10 sự kiện này (tôi rất thích đẩy, nhưng tôi đoán kéo là cách truy vấn duy nhất ở đây)
  5. Phân tích truy vấn cho tên của thiết bị được chỉ định cho thuê mới
  6. Truy vấn AD cho tên của thiết bị
  7. NẾU không tìm thấy trong AD, gửi email thông báo

Nếu bất cứ ai có bất kỳ ý tưởng nào về cách làm điều này đúng, tôi thực sự đánh giá cao nó. Tôi không tìm kiếm một "gimme the codez" nhưng rất muốn biết liệu có những lựa chọn thay thế cho danh sách trên hay nếu tôi không suy nghĩ rõ ràng và một phương pháp khác tồn tại để thu thập thông tin này. Nếu bạn có các đoạn mã / lệnh PS mà bạn muốn chia sẻ để giúp thực hiện điều này, thì tốt hơn hết.


Bạn đang tìm cách chặn họ, hoặc chỉ nhận được thông báo nếu họ nhận được IP?
HostBits

@Cheekaleak - chỉ cần nhận được thông báo.
TheCleaner

Còn máy in mạng sử dụng DHCP thì sao?
jftuga

@jftuga - chúng tôi sử dụng IP tĩnh cho máy in mạng.
TheCleaner

Câu trả lời:


6

Rất cảm ơn ErikE và những người khác ở đây, tôi đã đi vào một con đường ... Tôi sẽ không nói đó là con đường đúng, nhưng kịch bản Powershell mà tôi nghĩ ra đã làm nên trò.

Mã dưới đây nếu bất cứ ai muốn nó. Chỉ cần chạy thủ công trỏ vào từng máy chủ DHCP hoặc lên lịch cho nó (một lần nữa chỉ vào từng máy chủ DHCP trong tập lệnh).

Kịch bản làm gì:

  1. Nhận thông tin cho thuê từ máy chủ DHCP (cho thuê ipv4)
  2. Xuất ra các hợp đồng thuê cho một tập tin csv
  3. Đọc lại trong tệp CSV đó để truy vấn AD
  4. Truy vấn AD cho máy tính
  5. Nếu không tìm thấy kết quả đầu ra cho một tệp txt mới
  6. Tạo một danh sách duy nhất tệp txt cuối cùng từ tệp được tạo ở # 5 ở trên (vì có thể có bản sao nếu máy khách đăng ký nhiều lần hoặc có nhiều hơn một bộ chuyển đổi)
  7. gửi email nội dung của tệp đầu ra cuối cùng cho quản trị viên

Những gì bạn cần:

Kịch bản sử dụng mô-đun AD ( import-module activedirectory) để nó chạy tốt nhất trên AD DC chạy DHCP. Nếu đây không phải là trường hợp của bạn, bạn có thể cài đặt mô-đun powershell của AD: http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory- mô-đun-powershell-in-windows-7.aspx

Bạn cũng sẽ cần các lệnh ghép ngắn AD Powershell của Quest được tìm thấy tại đây: http://www.quest.com/powershell/activeroles-server.aspx . Cài đặt NÀY TRƯỚC KHI chạy tập lệnh hoặc nó sẽ thất bại.

Bản thân tập lệnh (đã được khử trùng, bạn sẽ cần thiết lập một số biến cho phù hợp với nhu cầu của mình như tên tệp đầu vào, tên miền để kết nối, máy chủ dhcp để kết nối, cài đặt email gần cuối, v.v.):

# Get-nonADclientsOnDHCP.ps1

# Author : TheCleaner http://serverfault.com/users/7861/thecleaner with a big thanks for a lot of the lease grab code to Assaf Miron on code.google.com

# Description : This Script grabs the current leases on a Windows DHCP server, outputs it to a csv
# then takes that csv file as input and determines if the lease is from a non-AD joined computer.  It then emails
# an administrator notification.  Set it up on a schedule of your choosing in Task Scheduler.
# This helps non-802.1X shops keep track of rogue DHCP clients that aren't part of the domain.

#

# Input : leaselog.csv

# Output: Lease log = leaselog.csv
# Output: Rogue Clients with dupes = RogueClients.txt
# Output: Rogue Clients - unique = RogueClientsFinal.txt

$DHCP_SERVER = "PUT YOUR SERVER NAME OR IP HERE" # The DHCP Server Name

$LOG_FOLDER = "C:\DHCP" # A Folder to save all the Logs

# Create Log File Paths

$LeaseLog = $LOG_FOLDER+"\LeaseLog.csv"

#region Create Scope Object

# Create a New Object

$Scope = New-Object psobject

# Add new members to the Object

$Scope | Add-Member noteproperty "Address" ""

$Scope | Add-Member noteproperty "Mask" ""

$Scope | Add-Member noteproperty "State" ""

$Scope | Add-Member noteproperty "Name" ""

$Scope | Add-Member noteproperty "LeaseDuration" ""

# Create Each Member in the Object as an Array

$Scope.Address = @()

$Scope.Mask = @()

$Scope.State = @()

$Scope.Name = @()

$Scope.LeaseDuration = @()

#endregion


#region Create Lease Object

# Create a New Object

$LeaseClients = New-Object psObject

# Add new members to the Object

$LeaseClients | Add-Member noteproperty "IP" ""

$LeaseClients | Add-Member noteproperty "Name" ""

$LeaseClients | Add-Member noteproperty "Mask" ""

$LeaseClients | Add-Member noteproperty "MAC" ""

$LeaseClients | Add-Member noteproperty "Expires" ""

$LeaseClients | Add-Member noteproperty "Type" ""

# Create Each Member in the Object as an Array

$LeaseClients.IP = @()

$LeaseClients.Name = @()

$LeaseClients.MAC = @()

$LeaseClients.Mask = @()

$LeaseClients.Expires = @()

$LeaseClients.Type = @()

#endregion


#region Create Reserved Object

# Create a New Object

$LeaseReserved = New-Object psObject

# Add new members to the Object

$LeaseReserved | Add-Member noteproperty "IP" ""

$LeaseReserved | Add-Member noteproperty "MAC" ""

# Create Each Member in the Object as an Array

$LeaseReserved.IP = @()

$LeaseReserved.MAC = @()

#endregion


#region Define Commands

#Commad to Connect to DHCP Server

$NetCommand = "netsh dhcp server \\$DHCP_SERVER"

#Command to get all Scope details on the Server

$ShowScopes = "$NetCommand show scope"

#endregion


function Get-LeaseType( $LeaseType )

{

# Input : The Lease type in one Char

# Output : The Lease type description

# Description : This function translates a Lease type Char to it's relevant Description


Switch($LeaseType){

"N" { return "None" }

"D" { return "DHCP" }

"B" { return "BOOTP" }

"U" { return "UNSPECIFIED" }

"R" { return "RESERVATION IP" }

}

}


function Check-Empty( $Object ){

# Input : An Object with values.

# Output : A Trimmed String of the Object or '-' if it's Null.

# Description : Check the object if its null or not and return it's value.

If($Object -eq $null)

{

return "-"

}

else

{

return $Object.ToString().Trim()

}

}


function out-CSV ( $LogFile, $Append = $false) {

# Input : An Object with values, Boolean value if to append the file or not, a File path to a Log File

# Output : Export of the object values to a CSV File

# Description : This Function Exports all the Values and Headers of an object to a CSV File.

#  The Object is recieved with the Input Const (Used with Pipelineing) or the $inputObject

Foreach ($item in $input){

# Get all the Object Properties

$Properties = $item.PsObject.get_properties()

# Create Empty Strings - Start Fresh

$Headers = ""

$Values = ""

# Go over each Property and get it's Name and value

$Properties | %{ 

$Headers += $_.Name + ","

$Values += $_.Value

}

# Output the Object Values and Headers to the Log file

If($Append -and (Test-Path $LogFile)) {

$Values | Out-File -Append -FilePath $LogFile -Encoding Unicode

}

else {

# Used to mark it as an Powershell Custum object - you can Import it later and use it

# "#TYPE System.Management.Automation.PSCustomObject" | Out-File -FilePath $LogFile

$Headers | Out-File -FilePath $LogFile -Encoding Unicode

$Values | Out-File -Append -FilePath $LogFile -Encoding Unicode

}

}

}


#region Get all Scopes in the Server 

# Run the Command in the Show Scopes var

$AllScopes = Invoke-Expression $ShowScopes

# Go over all the Results, start from index 5 and finish in last index -3

for($i=5;$i -lt $AllScopes.Length-3;$i++)

{

# Split the line and get the strings

$line = $AllScopes[$i].Split("-")

$Scope.Address += Check-Empty $line[0]

$Scope.Mask += Check-Empty $line[1]

$Scope.State += Check-Empty $line[2]

# Line 3 and 4 represent the Name and Comment of the Scope

# If the name is empty, try taking the comment

If (Check-Empty $line[3] -eq "-") {

$Scope.Name += Check-Empty $line[4]

}

else { $Scope.Name += Check-Empty $line[3] }

}

# Get all the Active Scopes IP Address

$ScopesIP = $Scope | Where { $_.State -eq "Active" } | Select Address

# Go over all the Adresses to collect Scope Client Lease Details

Foreach($ScopeAddress in $ScopesIP.Address){

# Define some Commands to run later - these commands need to be here because we use the ScopeAddress var that changes every loop

#Command to get all Lease Details from a specific Scope - when 1 is amitted the output includes the computer name

$ShowLeases = "$NetCommand scope "+$ScopeAddress+" show clients 1"

#Command to get all Reserved IP Details from a specific Scope

$ShowReserved = "$NetCommand scope "+$ScopeAddress+" show reservedip"

#Command to get all the Scopes Options (Including the Scope Lease Duration)

$ShowScopeDuration = "$NetCommand scope "+$ScopeAddress+" show option"

# Run the Commands and save the output in the accourding var

$AllLeases = Invoke-Expression $ShowLeases 

$AllReserved = Invoke-Expression $ShowReserved 

$AllOptions = Invoke-Expression $ShowScopeDuration

# Get the Lease Duration from Each Scope

for($i=0; $i -lt $AllOptions.count;$i++) 

{ 

# Find a Scope Option ID number 51 - this Option ID Represents  the Scope Lease Duration

if($AllOptions[$i] -match "OptionId : 51")

{ 

# Get the Lease Duration from the Specified line

$tmpLease = $AllOptions[$i+4].Split("=")[1].Trim()

# The Lease Duration is recieved in Ticks / 10000000

$tmpLease = [int]$tmpLease * 10000000; # Need to Convert to Int and Multiply by 10000000 to get Ticks

# Create a TimeSpan Object

$TimeSpan = New-Object -TypeName TimeSpan -ArgumentList $tmpLease

# Calculate the $tmpLease Ticks to Days and put it in the Scope Lease Duration

$Scope.LeaseDuration += $TimeSpan.TotalDays

# After you found one Exit the For

break;

} 

}

# Get all Client Leases from Each Scope

for($i=8;$i -lt $AllLeases.Length-4;$i++)

{

# Split the line and get the strings

$line = [regex]::split($AllLeases[$i],"\s{2,}")

# Check if you recieve all the lines that you need

$LeaseClients.IP += Check-Empty $line[0]

$LeaseClients.Mask += Check-Empty $line[1].ToString().replace("-","").Trim()

$LeaseClients.MAC += $line[2].ToString().substring($line[2].ToString().indexOf("-")+1,$line[2].toString().Length-1).Trim()

$LeaseClients.Expires += $(Check-Empty $line[3]).replace("-","").Trim()

$LeaseClients.Type += Get-LeaseType $(Check-Empty $line[4]).replace("-","").Trim()

$LeaseClients.Name += Check-Empty $line[5]

}

# Get all Client Lease Reservations from Each Scope

for($i=7;$i -lt $AllReserved.Length-5;$i++)

{

# Split the line and get the strings

$line = [regex]::split($AllReserved[$i],"\s{2,}")

$LeaseReserved.IP += Check-Empty $line[0]

$LeaseReserved.MAC += Check-Empty $line[2]

}

}

#endregion 


#region Create a Temp Scope Object

# Create a New Object

$tmpScope = New-Object psobject

# Add new members to the Object

$tmpScope | Add-Member noteproperty "Address" ""

$tmpScope | Add-Member noteproperty "Mask" ""

$tmpScope | Add-Member noteproperty "State" ""

$tmpScope | Add-Member noteproperty "Name" ""

$tmpScope | Add-Member noteproperty "LeaseDuration" ""

#endregion

#region Create a Temp Lease Object

# Create a New Object

$tmpLeaseClients = New-Object psObject

# Add new members to the Object

$tmpLeaseClients | Add-Member noteproperty "IP" ""

$tmpLeaseClients | Add-Member noteproperty "Name" ""

$tmpLeaseClients | Add-Member noteproperty "Mask" ""

$tmpLeaseClients | Add-Member noteproperty "MAC" ""

$tmpLeaseClients | Add-Member noteproperty "Expires" ""

$tmpLeaseClients | Add-Member noteproperty "Type" ""

#endregion

#region Create a Temp Reserved Object

# Create a New Object

$tmpLeaseReserved = New-Object psObject

# Add new members to the Object

$tmpLeaseReserved | Add-Member noteproperty "IP" ""

$tmpLeaseReserved | Add-Member noteproperty "MAC" ""

#endregion

# Go over all the Client Lease addresses and export each detail to a temporary var and out to the log file

For($l=0; $l -lt $LeaseClients.IP.Length;$l++)

{

# Get all Scope details to a temp var

$tmpLeaseClients.IP = $LeaseClients.IP[$l] + ","

$tmpLeaseClients.Name = $LeaseClients.Name[$l] + ","

$tmpLeaseClients.Mask =  $LeaseClients.Mask[$l] + ","

$tmpLeaseClients.MAC = $LeaseClients.MAC[$l] + ","

$tmpLeaseClients.Expires = $LeaseClients.Expires[$l] + ","

$tmpLeaseClients.Type = $LeaseClients.Type[$l]

# Export with the Out-CSV Function to the Log File

$tmpLeaseClients | out-csv $LeaseLog -append $true

}



#Continue on figuring out if the DHCP lease clients are in AD or not

#Import the Active Directory module
import-module activedirectory

#import Quest AD module
Add-PSSnapin Quest.ActiveRoles.ADManagement

#connect to AD
Connect-QADService PUTTHEFQDNOFYOURDOMAINHERE_LIKE_DOMAIN.LOCAL | Out-Null

# get input CSV
$leaselogpath = "c:\DHCP\LeaseLog.csv"
Import-csv -path $leaselogpath | 
#query AD for computer name based on csv log
foreach-object `
{ 
   $NameResult = Get-QADComputer -DnsName $_.Name
   If ($NameResult -eq $null) {$RogueSystem = $_.Name}
   $RogueSystem | Out-File C:\DHCP\RogueClients.txt -Append
   $RogueSystem = $null

}
Get-Content C:\DHCP\RogueClients.txt | Select-Object -Unique | Out-File C:\DHCP\RogueClientsFinal.txt
Remove-Item C:\DHCP\RogueClients.txt

#send email to netadmin
$smtpserver = "SMTP SERVER IP"
$from="DHCPSERVER@domain.com"
$to="TheCleaner@domain.com"
$subject="Non-AD joined DHCP clients"
$body= (Get-Content C:\DHCP\RogueClientsFinal.txt) -join '<BR>&nbsp;<BR>'
$mailer = new-object Net.Mail.SMTPclient($smtpserver)
$msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)
$msg.IsBodyHTML = $true
$mailer.send($msg)

Hy vọng rằng sẽ giúp người khác!


3

OK, tôi không chắc chắn tôi đã theo dõi nghi thức ở đây nhưng đang đăng câu trả lời thứ hai thay vì chỉnh sửa câu hỏi trước đó, vì nó có chứa một số thông tin có thể được sử dụng cho ai đó ngay cả khi được chứng minh là không liên quan đến trường hợp này. Nếu điều đó làm cho tôi trở thành một thằng ngốc trong diễn đàn này, vui lòng thông báo cho tôi về những cách sai lầm của tôi.

Vấn đề được chia thành nhiều phần, đây là những gợi ý cho những phần tôi thấy thú vị nhất. Nếu không có ví dụ từ nhật ký thì đây là điều tốt nhất tôi có thể làm, vì vậy đó chỉ là đề xuất chứ không phải giải pháp.

Để phân tích cú pháp sử dụng nhật ký get-contentvới -waittham số. Đối với trường hợp sử dụng của tôi, nó đủ để tìm thấy một lỗi trong nhật ký lỗi.

Đây là những gì làm việc cho trường hợp sử dụng của riêng tôi, tha thứ cho định dạng:

get-content E:\temp13\log.txt -tail(1) -wait | where {$_ -match "ERROR"} |
    foreach {
        send-mailmessage `
        -port 25 `
        -smtpserver my.mail.server `
        -from logmon@a.b `
        -to erike@a.b `
        -subject "test logmonitor" `
        -body "ERROR found: $_" `
        }

Thay vì $_ -match "ERROR"bạn sẽ cần tách trường ID đăng nhập và tên máy tính bằng cách nào đó. Tôi không chắc chắn làm thế nào để đi về điều đó theo cách tốt nhất ngay bây giờ, nhưng vì where-object -matchhỗ trợ regex nên tôi đoán đó có thể là một lựa chọn. Bạn cũng có thể bắt đầu bằng cách lưu trữ biến $ _ trong một biến mới khác, để có thể lấy nó một cách thuận tiện sau này trong đường ống, bên trong các vòng lặp foreach lồng nhau, v.v.

Giả sử bạn có thể nhận được tại tên máy tính, tôi đoán get-adcomputercmdlet sẽ là cách đơn giản nhất để truy vấn AD ( import-module activedirectory) của bạn và tôi đoán về lỗi gửi thư?

Sử dụng import-csvtất nhiên sẽ thanh lịch hơn rất nhiều trong trường hợp của bạn, nhưng tôi không biết bất kỳ cách nào để theo dõi nó (nếu có ai đó đọc được điều này và biết một mẹo nhỏ trên con hẻm đó, xin vui lòng chia sẻ).


Cảm ơn ErikE, tôi sẽ chạy với điều này và cho bạn biết. Tôi sẽ cần tìm ra một cách để lấy thông tin, truy vấn AD, sau đó sau khi "cảnh báo" bỏ qua các kiểm tra trong tương lai của cùng một dòng đầu vào. Chẳng hạn, nếu nó truy vấn tệp cứ sau năm phút, tôi không muốn nó lặp lại cùng một thông tin và gửi thông báo lừa đảo cứ sau 5 phút.
TheCleaner

Hai điều tôi thấy hơi gọn gàng: Nếu bạn chỉ để kịch bản chạy, tham số chờ sẽ liên tục chờ đợi một dòng mới xuất hiện. Bạn không cần phải chạy lại tập lệnh. Hhis sẽ cho một hiệu ứng đẩy chứ không phải kéo. Ngoài ra, phần đuôi (1) sẽ chỉ phân tích 1 dòng cuối cùng khi bắt đầu. Do đó, nếu trình quản lý tác vụ thấy nó phải khởi động lại tập lệnh và bạn tìm cách đưa dòng giữ chỗ thay thế dòng cuối cùng để kích hoạt cảnh báo, bạn sẽ loại bỏ sự khó chịu của các cảnh báo.
ErikE

1
Erik, tôi đã tìm được cách xuất các hợp đồng thuê từ DHCP (crappy rằng năm 2012 có một lệnh ghép ngắn PS cho nó nhưng 2008 không) thành tệp csv. Bằng cách này, tôi không gây rối với nhật ký kiểm toán thực tế và không phải lo lắng về việc phá vỡ bất cứ điều gì với đầu vào. Tôi sẽ bắt đầu rối tung với việc hoàn thành phần còn lại của mã và cập nhật sớm.
TheCleaner

1

Theo giả định rằng bạn chắc chắn về ID sự kiện và không có sự kiện nào khác đăng nhập vào ID này trong nhật ký DHCP nhưng những sự kiện bạn quan tâm, đẩy thực sự là một tùy chọn.

1) Mở Trình quản lý máy chủ, chuyển đến nhật ký DHCP trong Trình xem sự kiện.

2) Tìm một mục đại diện mà bạn muốn đính kèm hành động của mình. Chọn nó và nhấp chuột phải.

3) Chọn "Đính kèm nhiệm vụ cho sự kiện này".

4) Thuật sĩ tạo tác vụ mở ra, mang nó đi từ đó ...

Thực sự có một tùy chọn email rõ ràng, nhưng nếu bạn cần nhiều logic hơn thì bạn hoàn toàn có thể sử dụng tùy chọn start-a-chương trình để kích hoạt powershell.exe và đính kèm tập lệnh vào nó. Có rất nhiều howtos tuyệt vời về cách để Trình quản lý tác vụ chạy các tập lệnh powershell nếu bạn cần hướng dẫn.

Cách thay thế ngay lập tức mà tôi thấy là sử dụng pull bằng cách phân tích Nhật ký sự kiện bằng cách sử dụng powershell theo các khoảng thời gian đã lên lịch. "The Microsoft Scripting Guy", còn gọi là Ed Wilson đã viết một số bài đăng trên blog tuyệt vời về cách phân tích Nhật ký sự kiện bằng cách sử dụng các lệnh ghép ngắn có sẵn trong các phiên bản khác nhau của powershell, vì vậy, lấy blog của anh ấy làm điểm bắt đầu sẽ là gợi ý của tôi.

Đối với các lệnh ghép ngắn thực tế, tôi không có thời gian để rút ra các đoạn trích tiện dụng của mình, nhưng sẽ xem xét lại sau một hoặc hai ngày và có thể đóng góp nếu không có ai khác tham gia với một số người được chọn tốt, hoặc bạn không biết Ọt đã tự mình giải quyết tất cả :-)


2
Erik, cảm ơn bạn. Vấn đề ở đây là DHCPsrvlog- "day" trong C: \ windows \ system32 \ DHCP (với tính năng kiểm tra DHCP được kích hoạt trong GUI máy chủ DHCP), không ghi vào bất kỳ nhật ký Trình xem sự kiện nào kể cả nhật ký trình xem sự kiện DHCP-Server Applications and Services Logs(cho đến nay dựa trên nghiên cứu / thử nghiệm của tôi)
TheCleaner

Tôi đã quên về những bản ghi đó. Nhưng tôi tin rằng đây là một địa điểm khả thi: Phân tích nhật ký văn bản bằng cách sử dụng nội dung get với các chỉ thị -wait và -tail. Điều này tương tự với đuôi trong * nix. Để đảm bảo một phiên bản luôn phân tích cú pháp nhật ký, Trình quản lý tác vụ có thể lên lịch cho tập lệnh khi khởi động hệ thống, sau đó bắt đầu mọi (khoảng thời gian ngắn nhất có thể) nhưng chỉ cho phép một phiên bản đang chạy. Nếu sự kiện của bạn bật lên, lửa logic.
ErikE

Hóa ra tôi có một vấn đề phân tích nhật ký tương tự để giải quyết trên Windows, tôi sẽ đăng những phát hiện của mình về phần cụ thể đó khi tôi chắc chắn nó hoạt động, và có khả năng một số khối xây dựng khác mà tôi đang nói dối sẽ hữu ích cho bạn. Bạn có thể dán một vài hàng đại diện nhưng bị xáo trộn từ nhật ký dhcp của bạn không? Tôi đặc biệt quan tâm đến định dạng tên thiết bị.
ErikE

1

Mặc dù điều này không giải quyết được giải pháp mong muốn của bạn, một tùy chọn có thể đạt được mục tiêu của bạn là sử dụng arpwatch( liên kết ) để thông báo cho bạn khi một máy chủ mới (chưa từng thấy) được nhìn thấy trên mạng.

Một thay thế Windows có arpwatchvẻ là decaffeinatid nhưng tôi chưa bao giờ sử dụng nó vì vậy không thể nói nó tốt hay xấu.


Cảm ơn. Ý tưởng có âm thanh. Tôi có thể đi xuống con đường đó nếu cần thiết.
TheCleaner

Lợi ích bổ sung là điều này cũng sẽ bắt các máy mới sử dụng IP tĩnh, không nằm trong phạm vi đã nêu của bạn nhưng có lẽ nên như vậy.
mfinni
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.