Windows DHCP Sunucusu - AD'ye katılmayan bir aygıt bir IP adresi aldığında bildirim alın


15

SENARYO

Bunu en basit örnekle basitleştirmek için:

DHCP sunucu rolüne sahip bir Windows 2008 R2 standart DC'im var. IP'leri çeşitli IPv4 kapsamları aracılığıyla dağıtıyor, sorun yok.

NE GİBDİM

Bir aygıt DHCP adres kiralaması aldığında ve bu aygıt Active Directory'de etki alanına katılmış bir bilgisayar DEĞİLDİR . Özel Powershell, vb. Olup olmadığı benim için önemli değil.

Alt satır = Şu anda 802.1X kullanmadan alan dışı cihazların ağda ne zaman olduğunu bilmenin bir yolunu istiyorum. Bunun statik IP cihazlarını hesaba katmayacağını biliyorum. Ağı tarayacak ve cihazları bulabilecek izleme yazılımım var, ancak ayrıntılı olarak bu kadar ayrıntılı değil.

ARAŞTIRMA YAPILDI / ÖNERİLEN SEÇENEKLER

Yerleşik giriş ile böyle bir olasılık görmüyorum.

Evet, 802.1X'in farkındayım ve bu konumda uzun vadeli uygulama yeteneğine sahibim, ancak böyle bir projeden biraz uzaktayız ve bu, ağ kimlik doğrulama sorunlarını çözerken, bu hala dışarıda bana yardımcı oluyor 802.1X hedefleri.

Yararlı olabilecek bazı komut dosyası bitleri, vb.

Aşağıdaki mantığın sağlam olduğuna inanıyorum ( mevcut bir çözüm olmadığı varsayılarak ):

  1. Cihaz DHCP adresini alıyor
  2. Olay günlüğü girişi kaydedilir (DHCP denetim günlüğündeki olay kimliği 10 çalışmalıdır (yeni bir kiralama, en çok ilgilendiğim şeydir, yenileme değil): http://technet.microsoft.com/tr-tr/library /dd759178.aspx )
  3. Bu noktada, muhtemelen aşağıda kalan "STEPS" için bir tür senaryoyu devralmak zorunda kalacak.
  4. Her nasılsa bu olay kimliği 10 için bu DHCP günlüğü sorgu (Ben itmek isterim, ama çekme burada tek başvuru olduğunu sanırım)
  5. Yeni kiraya atanan cihazın adı sorgusunu ayrıştırın
  6. AD'nin cihaz adı için sorgulanması
  7. EĞER değil AD bulunan bir bildirim gönderecektir

Birinin bunu nasıl düzgün bir şekilde yapacağına dair herhangi bir fikri varsa, gerçekten takdir ediyorum. Ben bir "gimme codez" aramıyorum ama yukarıdaki listeye alternatifler olup olmadığını ya da net düşünmüyorum ve bu bilgileri toplamak için başka bir yöntem olup olmadığını bilmek isterim. Bunu başarmak için paylaşmak istediğiniz kod parçacıkları / PS komutlarınız varsa, daha iyi.


Onları engellemek mi yoksa IP alırlarsa bildirim almak mı istiyorsunuz?
HostBits

@Cheekaleak - sadece haberdar olun.
TheCleaner

DHCP kullanan ağ yazıcıları ne olacak?
jftuga

@jftuga - ağ yazıcıları için statik IP'ler kullanıyoruz.
TheCleaner

Yanıtlar:


6

ErikE ve buradaki diğerlerine çok teşekkür ederek, bir yoldan indim ... Doğru yol olduğunu söylemeyeceğim, ama bulduğum Powershell senaryosu hile yapıyor.

İsteyen varsa kod aşağıdadır. Her DHCP sunucusunu işaret edecek şekilde manuel olarak çalıştırın veya programlayın (yine koddaki her DHCP sunucusunu işaret ederek).

Senaryo ne yapar:

  1. DHCP sunucusundan kiralama bilgilerini alır (ipv4 kiralamaları)
  2. Kiralamayı bir csv dosyasına çıktılar
  3. Bu CSV dosyasında AD'yi sorgulamak için okur
  4. Bilgisayar için AD sorgular
  5. Yeni bir txt dosyasına çıktı bulunamazsa
  6. Yukarıdaki # 5'te oluşturulan dosyadan benzersiz bir liste son txt dosyası oluşturur (çünkü istemci birden fazla veya birden fazla bağdaştırıcıyla kaydolursa dupes olabilir)
  7. son çıktı dosyasının içeriğini bir yöneticiye e-posta ile gönderir

Gerekenler:

Komut dosyası, AD modülünü ( import-module activedirectory) kullanır, bu nedenle en iyi DHCP çalıştıran bir AD DC'de çalıştırılır. Bu sizin için uygun değilse, AD powershell modülünü yükleyebilirsiniz: http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory- modülü-in-powershell-in-pencereleri-7.aspx

Ayrıca burada bulunan Quest'in AD Powershell cmdlet'lerine de ihtiyacınız olacak: http://www.quest.com/powershell/activeroles-server.aspx . Betiği çalıştırmadan ÖNCE bunu yükleyin , yoksa başarısız olur.

Komut dosyasının kendisi (sterilize edilmiş, giriş dosyası adları, bağlanılacak etki alanı, bağlanmak için dhcp sunucusu, sonuna yakın e-posta ayarları vb.) Gereksinimlerinize uygun bazı değişkenleri ayarlamanız gerekir:

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

Umarım başka birine yardım eder!


3

Tamam, burada görgü kurallarını takip ettiğimden emin değilim, ancak bu davayla ilgisi kanıtlanmamış olsa bile birileri için yararlı olabilecek bazı bilgiler içerdiğinden, öncekimi düzenlemek yerine ikinci bir cevap gönderiyorum. Bu beni bu forumda bir aptal yaparsa, yanlış yollarla ilgili beni bilgilendirmekten çekinmeyin.

Sorun birkaç bölüme ayrılmıştır, işte en ilginç bulduğum öneriler. Günlük örnekleri olmadan bu yapabileceğim en iyisi, bu yüzden sadece çözümler değil öneriler.

Günlüğü ayrıştırmak get-contentiçin -waitparametreyle kullanın . Kullanım durumum için bir hata günlüğünde bir hata bulmak yeterli.

Kendi kullanım durumumda işe yarayan şey budur, biçimlendirmeyi affet:

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

Bunun yerine $_ -match "ERROR"günlük kimliği alanını ve bilgisayar adını bir şekilde ayırmanız gerekir. Şu anda bunu en iyi şekilde nasıl yapacağımdan emin değilim, ama where-object -matchregex desteği verdiği için bu bir seçenek olabilir sanırım. Ayrıca, $ _ değişkenini başka bir yeni değişkente depolayarak, daha sonra boru hattında, iç içe geçmiş ön döngülerde vb.

Bilgisayar adına ulaşabileceğinizi varsayarsak, get-adcomputercmdlet'in AD ( import-module activedirectory) sorgunuzu oluşturmanın en basit yolu olacağını tahmin ediyorum ve hata posta gönderirken sanırım?

import-csvTabii ki durumunuzda kullanmak çok daha zarif olurdu, ancak bunu izlemenin herhangi bir yolunun farkında değilim (eğer kimse bunu okursa ve o sokaktan bir numara biliyorsa lütfen paylaşın).


Teşekkürler ErikE, bununla koşacağım ve sana haber vereceğim. Ben bilgi, sorgu AD kapmak için bir yol bulmak gerekir, sonra "uyarı" sonra aynı giriş satırının gelecekteki denetimleri görmezden. Örneğin, dosyayı her beş dakikada bir sorgularsa, aynı bilgiyi yeniden yayınlamasını ve her 5 dakikada bir dupe uyarısı göndermesini istemiyorum.
TheCleaner

Biraz düzgün bulduğum iki şey: Eğer komut dosyasının çalışmasına izin verirseniz, wait parametresi sürekli olarak yeni bir satırın görünmesini bekler. Senaryoyu yeniden çalıştırmak zorunda değilsiniz. O çekmek yerine bir itme etkisi verecektir. Ayrıca, kuyruk (1) başlangıçta son 1 satırı ayrıştırır. Bu nedenle, görev yöneticisi komut dosyasını yeniden başlatması gerektiğini tespit ederse ve bir uyarıyı tetiklemek için son satırı değiştiren bir yer tutucu satırı enjekte etmenin bir yolunu bulursanız, reaktiflerin sıkıntısını devre dışı bırakmış olursunuz.
ErikE

1
Erik, kiraları DHCP'den (2012'de PS cmdlet'i var ancak 2008'de yok) crack'i bir csv dosyasına vermenin bir yolunu buldum. Bu şekilde, gerçek denetim günlükleriyle uğraşmam ve girdi ile herhangi bir şey kırmaktan endişelenmem gerekmiyor. Kodun geri kalanını halletmeye başlayacağım ve yakında güncelleyeceğim.
TheCleaner

1

Olay Kimliğinden emin olduğunuz ve DHCP günlüğünde bu kimliğe başka hiçbir olayın günlüğe kaydedilmediği, ancak ilgilendiğiniz varsayımlar altında, push gerçekten bir seçenektir.

1) Sunucu Yöneticisi'ni açın, Olay Görüntüleyicisi'ndeki DHCP günlüğüne gidin.

2) İşleminizi eklemek istediğiniz temsili bir giriş bulun. Seçin ve sağ tıklayın.

3) "Bu Etkinliğe Görev Ekle" yi seçin.

4) Görev Oluşturma Sihirbazı açılır, oradan uzaklaştırın ...

Aslında açık bir e-posta seçeneği var, ancak bundan daha fazla mantığa ihtiyacınız varsa, elbette powershell.exe'yi başlatmak ve bir komut dosyası eklemek için bir program başlat seçeneğini kullanabilirsiniz. Eğer rehberliğe ihtiyacınız varsa Görev Yöneticisi'nin powershell betiklerini çalıştırmasına nasıl izin vereceğiniz konusunda birçok mükemmel googleable howtos vardır.

Gördüğüm hemen alternatif, güç kaynağını zamanlanmış aralıklarla kullanarak Olay Günlüğünü ayrıştırarak çekme özelliğini kullanmaktır. "Microsoft Scripting Guy", yani Ed Wilson, PowerShell'in farklı sürümlerinde bulunan cmdlet'leri kullanarak Olay Günlüğünü nasıl ayrıştıracağına dair harika blog yazıları yazdı, bu yüzden blogunu bir başlangıç ​​noktası olarak almak benim önerim olacaktır.

Gerçek cmdlet'lere gelince, şu anda kullanışlı snippet'leri saklamak için zamanım yok, ancak bir veya iki gün içinde tekrar bakacağım ve başka iyi seçilmiş olanlarla hiç kimse girmediyse katkıda bulunabilir veya Hepsini kendiniz çözdünüz :-)


2
Erik, teşekkür ederim. Buradaki sorun, C: \ windows \ system32 \ DHCP'deki (DHCP sunucusu GUI'sinde DHCP denetimi etkinken) DHCPsrvlog- "gün" ifadesinin, DHCP-Sunucu olay görüntüleyici günlüğü dahil herhangi bir Olay Görüntüleyicisi günlüğüne yazmamasıdır Applications and Services Logs(şimdiye kadar yaptığım araştırma / teste dayanarak)
TheCleaner

Bu günlükleri unutmuştum. Ancak bunun olası bir mekan olduğuna inanıyorum: Metin günlüğünü -wait ve -tail yönergelerini kullanarak get-content kullanarak ayrıştırın. Bu, * nix'teki kuyruğa benzer. Bir örneğin her zaman günlüğü ayrıştırdığından emin olmak için, Görev Yöneticisi komut dosyasını sistem başlangıcında zamanlayabilir, ardından her birini başlatabilir (mümkün olan en kısa aralık) ancak yalnızca bir çalışan örneğe izin verebilir. Etkinliğiniz ortaya çıkarsa, mantık ateşleyin.
ErikE

Windows'da çözmek için benzer bir günlük ayrıştırma sorunum var gibi görünüyor, çalıştığımdan emin olduğumda bulgularımı o bölüme göndereceğim ve muhtemelen sizin için yararlı olması gereken etrafta bulunduğum bazı yapı taşları. Dhcp günlüğünüzden birkaç temsili ancak gizlenmiş satır yapıştırabilir misiniz? Özellikle aygıt adı biçimiyle ilgileniyorum.
ErikE

1

Bu, istediğiniz çözümü ele almasa da, hedefinize ulaşabilecek bir seçenek , ağda yeni (önceden görünmeyen) bir ana bilgisayar görüntülendiğinde sizi bilgilendirmek arpwatch( bağlantı ) kullanmaktır .

Windows alternatifi kafeinatidarpwatch gibi görünüyor ama hiç kullanmadım bu yüzden iyi ya da kötü konuşamıyor.


Teşekkürler. Fikir ses. Gerekirse o yoldan gidebilirim.
TheCleaner

Ek avantaj, bunun, sizin belirttiğiniz kapsamda olmayan ancak muhtemelen olması gereken statik IP kullanan yeni makineleri de yakalamasıdır.
mfinni
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.