Windows DHCP Server - รับการแจ้งเตือนเมื่ออุปกรณ์ที่ไม่ใช่โฆษณาเข้าร่วมได้รับที่อยู่ IP


15

สถานการณ์

หากต้องการทำให้เรื่องนี้ง่ายขึ้นเป็นตัวอย่างที่ง่ายที่สุด:

ฉันมี DC มาตรฐาน Windows 2008 R2 ที่มีบทบาทเซิร์ฟเวอร์ DHCP มันแจก IPs ผ่านขอบเขต IPv4 ที่หลากหลายไม่มีปัญหา

ฉันชอบอะไร

ฉันต้องการวิธีสร้างรายการแจ้งเตือน / เหตุการณ์บันทึก / คล้ายกันทุกครั้งที่อุปกรณ์ได้รับการเช่าที่อยู่ DHCP และอุปกรณ์นั้นไม่ใช่โดเมนที่เข้าร่วมคอมพิวเตอร์ใน Active Directory มันไม่สำคัญสำหรับฉันไม่ว่าจะเป็น Powershell ที่กำหนดเอง ฯลฯ

Bottom line = ฉันต้องการทราบวิธีเมื่ออุปกรณ์ที่ไม่ใช่โดเมนอยู่ในเครือข่ายโดยไม่ใช้ 802.1X ในขณะนี้ ฉันรู้ว่านี่จะไม่ได้รับการพิจารณาว่าเป็นอุปกรณ์ IP แบบคงที่ ฉันมีซอฟต์แวร์ตรวจสอบที่จะสแกนเครือข่ายและค้นหาอุปกรณ์ แต่รายละเอียดค่อนข้างไม่ละเอียดนัก

งานวิจัยเสร็จสิ้น / พิจารณาตัวเลือก

ฉันไม่เห็นความเป็นไปได้เช่นนี้กับการบันทึกในตัว

ใช่ฉันตระหนักถึง 802.1X และมีความสามารถในการใช้งานระยะยาวในสถานที่นี้ แต่เราอยู่ห่างจากโครงการเช่นนั้นและในขณะที่จะแก้ปัญหาการตรวจสอบเครือข่ายก็ยังมีประโยชน์สำหรับฉันนอก ของ 802.1X เป้าหมาย

ฉันดูรอบ ๆ บิตสคริปต์ ฯลฯ ซึ่งอาจเป็นประโยชน์ แต่สิ่งที่ฉันค้นหาทำให้ฉันเชื่อว่า google-fu ของฉันทำให้ฉันล้มเหลวในขณะนี้

ฉันเชื่อว่าตรรกะด้านล่างเป็นเสียง ( สมมติว่าไม่มีวิธีแก้ปัญหาที่มีอยู่ ):

  1. อุปกรณ์ได้รับที่อยู่ DHCP
  2. รายการบันทึกเหตุการณ์ถูกบันทึกไว้ (รหัสเหตุการณ์ 10 ในบันทึกการตรวจสอบ DHCP ควรใช้งานได้ (เนื่องจากสัญญาเช่าใหม่เป็นสิ่งที่ฉันสนใจมากที่สุดไม่ใช่ต่ออายุ): http://technet.microsoft.com/en-us/library /dd759178.aspx )
  3. ณ จุดนี้สคริปต์บางประเภทอาจจะต้องเข้ามาแทนที่ "ขั้นตอน" ที่เหลือด้านล่าง
  4. อย่างใดแบบสอบถามล็อก DHCP นี้สำหรับเหตุการณ์ ID 10 เหล่านี้ (ฉันชอบผลักดัน แต่ฉันเดา pull เป็น recourse เฉพาะที่นี่)
  5. แยกแบบสอบถามสำหรับชื่อของอุปกรณ์ที่ได้รับมอบหมายสัญญาเช่าใหม่
  6. Query AD สำหรับชื่ออุปกรณ์
  7. หากไม่พบในโฆษณาให้ส่งอีเมลแจ้งเตือน

หากใครมีความคิดเกี่ยวกับวิธีการทำเช่นนี้อย่างถูกต้องฉันจะขอบคุณมันจริงๆ ฉันไม่ได้มองหา "gimme the codez" แต่อยากจะรู้ว่ามีทางเลือกในรายการด้านบนหรือถ้าฉันไม่ได้คิดอย่างชัดเจนและมีวิธีการอื่นในการรวบรวมข้อมูลนี้ หากคุณมีคำสั่งโค้ดขนาดสั้น / PS ที่คุณต้องการแบ่งปันเพื่อช่วยให้บรรลุผลดังกล่าว


คุณต้องการบล็อกพวกเขาหรือเพียงแค่ได้รับแจ้งว่าพวกเขาได้รับ IP หรือไม่
HostBits

@Cheekaleak - เพิ่งได้รับแจ้ง
TheCleaner

แล้วเครื่องพิมพ์เครือข่ายที่ใช้ DHCP ล่ะ
jftuga

@jftuga - เราใช้ IP คงที่สำหรับเครื่องพิมพ์เครือข่าย
TheCleaner

คำตอบ:


6

ขอบคุณมากที่ ErikE และคนอื่น ๆ ที่นี่ฉันได้ไปตามทาง ... ฉันจะไม่บอกว่ามันเป็นเส้นทางที่ถูกต้อง แต่สคริปต์ Powershell ที่ฉันได้ทำขึ้นมาจะใช้กลอุบาย

รหัสด้านล่างถ้าใครต้องการมัน เพียงแค่เรียกใช้ชี้ไปที่เซิร์ฟเวอร์ DHCP แต่ละตัวหรือกำหนดเวลา (ชี้ไปที่เซิร์ฟเวอร์ DHCP แต่ละตัวในสคริปต์อีกครั้ง)

สคริปต์ทำอะไร:

  1. รับข้อมูลการเช่าจากเซิร์ฟเวอร์ DHCP (สัญญาเช่า ipv4)
  2. ส่งออกสัญญาเช่าไปยังไฟล์ csv
  3. อ่านกลับในไฟล์ CSV นั้นเพื่อสอบถามโฆษณา
  4. Query AD สำหรับคอมพิวเตอร์
  5. หากไม่พบผลลัพธ์ไปยังไฟล์ txt ใหม่
  6. สร้างรายการไฟล์ txt สุดท้ายที่ไม่ซ้ำใครจากไฟล์ที่สร้างใน # 5 ด้านบน (เนื่องจากอาจมีการซ้ำซ้อนหากลูกค้าลงทะเบียนมากกว่าหนึ่งครั้งหรือมากกว่าหนึ่งอะแดปเตอร์)
  7. ส่งอีเมลเนื้อหาของไฟล์เอาต์พุตสุดท้ายไปยังผู้ดูแลระบบ

สิ่งที่คุณต้องการ:

สคริปต์ใช้โมดูล AD ( import-module activedirectory) เพื่อให้ทำงานได้ดีที่สุดใน AD DC ที่รัน DHCP หากนี่ไม่ใช่กรณีของคุณคุณสามารถติดตั้งโมดูล AD powershell: http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory- โมดูลใน PowerShell ในหน้าต่าง 7.aspx

นอกจากนี้คุณยังจะต้องเควส AD cmdlets Powershell พบได้ที่นี่: http://www.quest.com/powershell/activeroles-server.aspx ติดตั้งเหล่านี้ก่อนที่จะเรียกใช้สคริปต์มิฉะนั้นจะล้มเหลว

สคริปต์เอง (ถูกสุขลักษณะคุณจะต้องตั้งค่าตัวแปรบางอย่างให้เหมาะสมกับความต้องการของคุณเช่นชื่อไฟล์อินพุตโดเมนที่จะเชื่อมต่อกับเซิร์ฟเวอร์ dhcp เพื่อเชื่อมต่อกับการตั้งค่าอีเมลใกล้จะสิ้นสุด ฯลฯ ):

# 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)

หวังว่าจะช่วยคนอื่น!


3

ตกลงฉันไม่แน่ใจว่าฉันกำลังปฏิบัติตามมารยาทที่นี่ แต่กำลังโพสต์คำตอบที่สองแทนการแก้ไขก่อนหน้าของฉันเพราะมันมีข้อมูลบางอย่างที่อาจเป็นประโยชน์กับใครบางคนแม้ว่าจะไม่เกี่ยวข้องกับกรณีนี้ ถ้านั่นทำให้ฉันเป็นคนงี่เง่าในฟอรัมนี้อย่าลังเลที่จะแจ้งให้ฉันทราบถึงวิธีการที่ผิดพลาดของฉัน

ปัญหาแบ่งออกเป็นหลายส่วนต่อไปนี้เป็นคำแนะนำสำหรับสิ่งที่ฉันคิดว่าน่าสนใจที่สุด หากไม่มีตัวอย่างจากบันทึกนี้เป็นวิธีที่ดีที่สุดที่ฉันสามารถทำได้ดังนั้นจึงเป็นเพียงข้อเสนอแนะไม่ใช่ทางออก

ในการแยกวิเคราะห์บันทึกใช้get-contentกับ-waitพารามิเตอร์ สำหรับกรณีการใช้งานของฉันมันก็เพียงพอที่จะหาข้อผิดพลาดในบันทึกข้อผิดพลาด

นี่คือสิ่งที่ใช้ได้กับกรณีการใช้งานของฉันเองให้อภัยการจัดรูปแบบ:

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: $_" `
        }

แทนที่จะเป็น$_ -match "ERROR"คุณจะต้องแยกฟิลด์บันทึก ID และชื่อคอมพิวเตอร์อย่างใด ฉันไม่แน่ใจว่าจะทำอย่างไรในวิธีที่ดีที่สุดในตอนนี้ แต่เนื่องจากwhere-object -matchให้การสนับสนุน regex ฉันคิดว่านั่นอาจเป็นตัวเลือก คุณสามารถเริ่มต้นด้วยการจัดเก็บตัวแปร $ _ ในตัวแปรใหม่อื่นเพื่อให้สามารถรับได้ตามความสะดวกของคุณในภายหลังในไปป์ไลน์ภายในลูป foreach ซ้อนกันเป็นต้น

สมมติว่าคุณได้รับชื่อคอมพิวเตอร์ฉันเดาget-adcomputercmdlet จะเป็นวิธีที่ง่ายที่สุดในการค้นหาโฆษณาของคุณ ( import-module activedirectory) และฉันเดาว่ามีข้อผิดพลาดในการส่งอีเมล

import-csvแน่นอนว่าใช้ของคุณจะดูสง่างามกว่าในกรณีของคุณ แต่ฉันไม่ทราบวิธีการปรับแต่ง (ถ้ามีคนอ่านและรู้เคล็ดลับในซอยนั้นได้โปรดแบ่งปัน)


ขอบคุณ ErikE ฉันจะทำงานด้วยสิ่งนี้และแจ้งให้คุณทราบ ฉันจะต้องคิดหาวิธีที่จะคว้าข้อมูลโฆษณาจากนั้นหลังจาก "แจ้งเตือน" จะไม่สนใจการตรวจสอบในอนาคตของอินพุตเดียวกัน ตัวอย่างเช่นหากไฟล์สอบถามทุกห้านาทีฉันไม่ต้องการให้ข้อมูลใหม่ซ้ำและส่งการแจ้งเตือน dupe ทุก 5 นาที
TheCleaner

สองสิ่งที่ฉันคิดว่าเป็นระเบียบเล็กน้อย: ถ้าคุณปล่อยให้สคริปต์รันพารามิเตอร์ wait จะทำให้มันรออยู่ตลอดเวลาเพื่อให้บรรทัดใหม่ปรากฏขึ้น คุณไม่ต้องเรียกใช้สคริปต์อีกครั้ง เขาจะให้เอฟเฟกต์แรงมากกว่าการดึง นอกจากนี้หาง (1) จะมีการแยกวิเคราะห์ 1 บรรทัดสุดท้ายเมื่อเริ่มต้น ดังนั้นหากตัวจัดการงานพบว่าต้องเริ่มต้นสคริปต์ใหม่และคุณพบวิธีการแทรกตัวยึดตำแหน่งแทนที่บรรทัดสุดท้ายเพื่อเรียกใช้การแจ้งเตือนคุณจะปลดอาวุธการก่อกวน
ErikE

1
เอริคฉันได้พบวิธีการส่งออกสัญญาเช่าจาก DHCP (เส็งเคร็งที่ 2012 มี PS cmdlet สำหรับมัน แต่ 2008 ไม่ได้) ไปยังไฟล์ csv วิธีนี้ฉันไม่ยุ่งกับบันทึกการตรวจสอบจริงและไม่ต้องกังวลเกี่ยวกับการทำลายสิ่งใดด้วยการป้อนข้อมูล ฉันจะเริ่มยุ่งกับการทำให้ส่วนที่เหลือของรหัสเสร็จและอัปเดตในไม่ช้า
TheCleaner

1

ภายใต้สมมติฐานที่ว่าคุณมั่นใจใน ID เหตุการณ์และไม่มีเหตุการณ์อื่นใดที่เข้าสู่ ID นี้ในบันทึก DHCP แต่สิ่งที่คุณสนใจนั้นคือตัวเลือกการพุช

1) เปิดตัวจัดการเซิร์ฟเวอร์ไปที่บันทึก DHCP ใน Event Viewer

2) ค้นหารายการตัวแทนที่คุณต้องการแนบการกระทำของคุณ เลือกและคลิกขวา

3) เลือก "แนบงานกับกิจกรรมนี้"

4) ตัวช่วยสร้างการสร้างงานเปิดขึ้นนำออกไปจากที่นั่น ...

มีตัวเลือกอีเมลที่ชัดเจน แต่ถ้าคุณต้องการตรรกะมากกว่านั้นคุณสามารถใช้ตัวเลือก start-a-program เพื่อเริ่ม powershell.exe และแนบสคริปต์กับมัน มีวิธีใช้ Google ที่ยอดเยี่ยมมากมายเกี่ยวกับวิธีการให้ตัวจัดการงานเรียกใช้สคริปต์ PowerShell หากคุณต้องการคำแนะนำ

ทางเลือกที่ตรงไปตรงมาที่ฉันเห็นคือการใช้การดึงโดยแยกวิเคราะห์บันทึกเหตุการณ์โดยใช้ PowerShell ตามช่วงเวลาที่กำหนด "The Microsoft Scripting Guy" หรือที่รู้จักกันในชื่อเอ็ดวิลสันได้เขียนโพสต์บล็อกยอดเยี่ยมเกี่ยวกับวิธีการแยกวิเคราะห์บันทึกเหตุการณ์โดยใช้ cmdlets ที่มีอยู่ใน PowerShell รุ่นต่างๆดังนั้นการใช้บล็อกของเขาเป็นจุดเริ่มต้น

สำหรับ cmdlets จริง ๆ ฉันไม่มีเวลาที่จะดึงตัวอย่างที่มีประโยชน์ของฉันออกมา แต่จะดูอีกครั้งในหนึ่งหรือสองวันและอาจมีส่วนร่วมหากไม่มีใครเข้าร่วมกับคนที่ได้รับการคัดเลือกมาอย่างดี ไม่สามารถแก้ไขได้ด้วยตัวเอง :-)


2
เอริคขอบคุณ ปัญหาที่นี่คือ DHCPsrvlog- "วัน" ใน C: \ windows \ system32 \ DHCP (เปิดใช้งานการตรวจสอบ DHCP ใน GUI เซิร์ฟเวอร์ DHCP GUI) ไม่ได้เขียนลงในบันทึกของตัวแสดงเหตุการณ์รวมถึงบันทึกเหตุการณ์ตัวแสดงเหตุการณ์ DHCP- เซิร์ฟเวอร์ภายใต้Applications and Services Logs(จนถึงตอนนี้ขึ้นอยู่กับการวิจัย / การทดสอบของฉัน)
TheCleaner

ฉันลืมบันทึกเหล่านั้น แต่ฉันเชื่อว่านี่เป็นสถานที่ที่เป็นไปได้: แยกวิเคราะห์ข้อความโดยใช้เนื้อหาที่ได้รับกับคำสั่งรอและหาง นี่คล้ายกับ tail ใน * ระวัง เพื่อให้แน่ใจว่าอินสแตนซ์แยกวิเคราะห์บันทึกเสมอตัวจัดการงานสามารถกำหนดเวลาสคริปต์เมื่อเริ่มต้นระบบจากนั้นเริ่มทุกครั้ง (ช่วงเวลาที่สั้นที่สุดที่เป็นไปได้) แต่อนุญาตให้ใช้งานอินสแตนซ์เดียวเท่านั้น หากเหตุการณ์ของคุณปรากฏขึ้นตรรกะการยิง
ErikE

กลายเป็นว่าฉันมีปัญหาในการแยกวิเคราะห์บันทึกที่คล้ายกันเพื่อแก้ปัญหาใน Windows ฉันจะโพสต์สิ่งที่ฉันพบในส่วนนั้นเมื่อฉันแน่ใจว่ามันใช้งานได้และน่าจะมีบางกลุ่มอาคารอื่น ๆ ที่ฉันนอนอยู่ คุณสามารถวางตัวแทนบางส่วน แต่ทำให้งงงวยแถวจากบันทึก DHCP ของคุณ? ฉันสนใจรูปแบบชื่ออุปกรณ์เป็นพิเศษ
ErikE

1

แม้ว่าวิธีนี้จะไม่สามารถแก้ไขปัญหาที่คุณต้องการได้ แต่ตัวเลือกที่อาจบรรลุเป้าหมายของคุณคือการใช้ประโยชน์ arpwatch ( ลิงก์ ) เพื่อแจ้งให้คุณทราบเมื่อเห็นโฮสต์ใหม่ (ที่ไม่เคยเห็นมาก่อน) บนเครือข่าย

อีกทางเลือกหนึ่งของ Windows ที่arpwatchดูเหมือนจะเป็นdecaffeinatidแต่ฉันไม่เคยใช้มันเลยไม่สามารถพูดได้ว่าดีหรือไม่ดี


ขอบคุณ ความคิดที่มีเสียง ฉันอาจไปตามทางนั้นหากจำเป็น
TheCleaner

ประโยชน์เพิ่มเติมคือมันจะจับเครื่องใหม่ที่ใช้ IP แบบคงที่ซึ่งไม่ได้อยู่ในขอบเขตที่คุณระบุ แต่น่าจะเป็น
mfinni
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.