7.10.2024

DHCP sunucu ve Powershell

Çalışan bir DHCP sunucuya rezervasyon (ayırma) ve policy (ilke) eklemek istiyorum. Etkin bir havuz var ve kiralamalar da düzgün çalışıyor. Bununla birlikte DHCP'den yapılacak rezervasyonlarla ilgili elimde CSV dosyasından alınmış şöyle bir liste var:

$rsv = Import-Csv -Path .\reservations.csv
$rsv
MAC HOST IPAd
--- ---- ----
xx-xx-xx-yy-yy-yy bilgisayar01 192.168.22.150
xx-xx-xx-yy-yy-yy bilgisayar02 192.168.22.151
... 

Öncelikle bu MAC-IP ilişkisi için birer rezervasyon oluşturalım.

$rsv | % { Add-DhcpServerv4Reservation -ComputerName dhcpserver 
    -ScopeId "192.168.22.0" -IPAddress $_.IPAd -ClientId $_.MAC 
    -Name $_.HOST -Description -$_.HOST -Type Dhcp }

Daha sonra da aynı $rsv dizisini kullanarak bir politika oluşturalım.

Add-DhcpServerv4Policy -ComputerName dhcpserver -Name "WifiPolicy" -ScopeId "192.168.22.0" 
    -Condition OR -MacAddress EQ,xx-xx-xx-yy-yy-yy,...

Buraya bütün MAC adreslerini en sona tek seferde ekleyebilir, ya da WifiPolicy altına birden fazla koşul girebiliriz. Bu komut sonunda ilke etkin olarak oluşturulur. Oluşturduktan sonra devre dışı kalmasını istersek -Enabled $false ile bunu belirtmeliyiz.

DhcpServer modülü ile gelen 100'den fazla cmdlet var. DHCP sunucuyu sadece powershell'den yönetmek ve izlemek bile mümkün. Tüm komut listesi için

Get-Command -Module DhcpServer

Sonrasında DHCP olaylarını incelemek istersek

Get-WinEvent -Computername DhcpServer 
    -FilterhashTable @{Logname="Microsoft-Windows-Dhcp-Server/Operational";StartTime=(Get-Date).AddHours(-8)}

Bir filter'ımız varsa izin verilmeyen istemciler ile ilgili olay kayıtları "Microsoft-Windows-Dhcp-Server/FilterNotifications" günlüğüne düşer. Görmek için

Get-WinEvent -Computername DhcpServer
    -FilterHashtable @{Logname="Microsoft-Windows-Dhcp-Server/FilterNotifications";StartTime=(Get-Date).AddHours(-8)}

3.10.2024

pacman ile yaşanan bazı hatalar

Manjaro'da uzun bir sürenin ardından pacman ile güncelleştirmeleri yüklemeye çalıştığımda paketlerdeki PGP imzalarının geçersiz olduğu ve doğrulanamadına dair birkaç hata aldım. Şu sayfadaki öneriler sorunu çözdü:

sudo rm -fr /etc/pacman.d/gnupg
sudo pacman-key --init
sudo pacman-key --populate archlinux manjaro
sudo pacman-key --refresh-keys

Başka bir sorun, pacman ile güncelleme yaparken kilitlenen veya başka bir sebeple beklenmedik bir şekilde kapanan/yeniden başlayan sistemlerde veritabanı kilit dosyasının silinmemesinden dolayı güncellemelerin tekrar başlayamaması. Bu durumu "unable to lock database" ya da "veritabanı dosyası kilitlenemedi" gibi hatalarla görüyoruz. Bu durumda /var/lib/pacman/db.lck konumundaki kilit dosyasını silmek işimizi görür.

sudo rm -f /var/lib/pacman/db.lck

Bazen de yüklü paketlerden birinin depodaki sürümden daha yeni olduğuna dair bir mesaj görüntülenir.

uyarı: python-pyqt5: yerel depodaki paket (5.15.6-7.1) extra deposundaki paketten 
(5.15.6-7) daha güncel
yapılacak bir şey yok

Bu durumda Manjaro Forum'da şu önerilmiş:

sudo pacman -Syyuu

1.10.2024

nslookup kullanımı

Bir FQDN'in isim çözümlemesi için

nslookup google.com

Bu isim çözümlemesini belli bir DNS sunucunun yapması için

nslookup google.com 1.1.1.1

Bu alan adına ait özel bir tip isim çözümlemesi için

nslookup -type=ns google.com
nslookup -type=txt google.com 1.1.1.1

Alan adlarını sorgunun sonuna eklememek için (varsayılan olarak içinde en az bir nokta geçen ama nokta ile bitmeyen bütün sorgulara DNS alan adı listesindeki alan adları eklenir)

nslookup -nosearch metin

Bunlar hem Windows'da hem Linux'ta geçerli.

27.09.2024

Düşük güç kipleri

ACPI güç kipleri şöyle [1]:

S0 : Enerji kablosu takılı çalışma.

S0 low-power idle (modern standby): Bilgisayar düşük güç kipinden yüksek güç kipine çık hızlı geçiş yapar. Bu kipi destekleyen sistemler S1-S3 kiplerini desteklemez. Bilgisayarlardaki bu kip, aslında akıllı telefonlardaki yapıdan esinlenir. Bilgisayar düşük enerji kipinde bile ağa bağlıdır, temel bazı arka plan işlevleri (ağa bağlı mesajlaşma gibi işlemler) hala çalışır durumdadır. İşlemciye ayrılan güç kısıtlanır, RAM daha yavaş güncellenir, diğer çevre birimleri de mümkün olduğunca yavaşlar veya kapanır. Yine de S1-S3 kiplerine göre daha fazla güç kullanır.

S1-S3: Bilgisayar kapalı gibi gözükür. Bu tüketimi S1'den S3'e gittikçe düşer. Ama her sistem bu kiplerden sadece birini destekler. S0'a göre daha az güç tüketir, S4'e göre daha fazla tüketir. Bu kipte RAM'deki veriler canlı tutulur. Ayrıca klavye ve fareden açılmanın mümkün olması için bu cihazlar da enerji harcar. Eskiden kullanılan Suspend-to-RAM S3 kipi için söyleniyordu. Buna ek olarak bir de melez uyku (hybrid sleep) kipinde ise sistem hibernation dosyası oluşturarak olası bir güç kaybında kaldığı yerden devam edebilir duruma gelir.

S4: En az güç tüketen kip. Burada RAM içeriği diske yazılır. Bilgisayarın güç düğmesi haricinde de açılabilmesi için bazı sistem bileşenleri (klavye, fare vs) güç kullanır. Bu kipin eski adı Suspend-to-Disk'ti. Şu anda kullanılan terim hibernation, yani kış uykusu. Ama Türkçe'de bu şekilde kullanılmıyor. Buna hazırda bekletme deniyor.

S5: Bilgisayarın kapalı ama güç bağlantısının olduğu durum.

S6: Bilgisayar kapalı, güç bağlantısı yok.

İngilizce ve Türkçe arasındaki geçiş de önemli:

S0 low-power idle
Sleep / Standby
Uyku (Modern bekleme [3])
S1-S3Sleep
Uyku
S4    
Hibernate    
Hazırda Beklet
S5    
Soft off
Kapalı amaç gücü bağlı
S6    
Mechanical off
Kapalı

Önemli, çünkü  standby'a uyku, hibernation'a da hazırda beklet demek benim için büyük bir kafa karışıklığı. Modern bekleme kipi (İngilcesi de Modern Standby, Türkçesi de Modern Bekleme) ve S1-S3'ü de kapsayan kiplere bazen bekleme kipi/modu (Standby) da denebiliyor. Bu kiplerde güç led'i yanıp söner, bazı sistem bileşenlerinin hala güç tükettiğini ve kullanıcı girişi ile sistemin kaldığı yerden devam ettirilebileceğini göstermek için [4].

Bilgisayarımızın desteklediği kipleri görmek için

powercfg /a

Modern bekleme kipini kapatmak için [2]'dek yöntemler uygulanabilir.

Devreden çıkarmak için:

New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Power\ 
-Name PlatformAoAcOverride -Value 0 -PropertyType DWord

ya da

reg add HKLM\System\CurrentControlSet\Control\Power /v PlatformAoAcOverride /t REG_DWORD /d 0

tekrar devreye almak için

Remove-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Power\ 
-Name PlatformAoAcOverride

ya da

reg delete  "HKLM\System\CurrentControlSet\Control\Power" /v PlatformAoAcOverride /f

Bu geçişleri Windows olay görüntüleyicisinden takip etmek için aşağıdaki olayları süzebiliriz:

Günlük: System
Kaynak: Microsoft-Windows-Kernel-Power
Id: 506 (Modern Bekleme kipine giriş), 507 (Modern Bekleme kipinden çıkış)

Bu kapsamda takip edilebilecek olaylar:

Ekran kilitleme/kilidini açma:

Günlük: Security
Kaynak: Microsoft-Windows-Security-Auditing
Id: 4800 (kilitlendi), 4801 (kilit açıldı)

---

[1] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-faqs

[2] https://www.elevenforum.com/t/disable-modern-standby-in-windows-10-and-windows-11.3929/

[3] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby

[4] https://binaryfork.com/sleep-vs-hybrid-sleep-vs-modern-standby-10050/

23.09.2024

Turing testlerinin geçilebilirliği

Yıllar önce Alan Turing, düşünebilen makinelerin sınırlarını düşünmüş. Bugün kullandığımız Turing (ya da CAPTCHA) testi bu çalışmanın sonucu. Geçtiğimiz dönemde bu testlerin amacı, bir web sayfasına erişimin bir insan tarafından mı, yoksa bir makine (yazılım/betik) tarafından mı yapıldığını ayırt etmekti. 2024 itibabiyle artık yapay zekalar Turing testini geçmeyi başardılar. Bu ilginç bir milat olacak. 50'lerde başlayan "düşünen makineler" kavramları hakkında çok hayaller kuruldu, çok farklı projeksiyonlar yapıldı. Genel beklenti 2000'den önce insanlarla eşdeğer düzeyde makineler tasarlanabileceği yönündeydi. Ama bu beklentiler biraz gecikti. Kısmet 2020'lereymiş.

İnsanların bile %67'sini doğru olarak cevaplayabildiği bir testi GPT4 %54 doğruluk payı ile cevaplayabilmiş. Ufukta insanlardan daha zeki makineler var. İnsanların çözemediği sorunları makinelere çözdüreceğiz; insanların taşıyamadığı yükleri iş makinelerine taşıttığımız, insanların altından kalkamayacağı matematiksel işlemleri bilgisayarlara hesaplattığımız gibi. Bunun sonucunda bugün gidilmesi zorunlu olmayan gym salonlarını ve sadece ilkokulda çarpım tablosunun ezberlenmesine benzer şekilde gelecekte belki de temel düzeyde "düşünme" derslerimiz olacak.

20.09.2024

Uzak bir sunucudaki oturumu kapatmak

Uzak bir sunucuda açılmış bir RDP oturumum var ama ulaşamıyorum. Bağlanmayı denediğimde boş bir ekran geliyor; görev çubuğu ve masaüstü simgeleri yok. Sanki bir oturumu kapatsam tekrar denediğimde sorun olmayacak.

Bunu yapmanın birkaç yolu var. Önce Sysinternals araçlarını deneyelim. Kimin sunucumuzda oturum açtığını görebilmek için

psloggedon \\sunucu

ve sonrasında oturumu kapatmak için

psshutdown -o -f \\sunucu
-o: oturumu kapat
-f: force, zorla kapat

bu iki komutun da sonuna 64 eklenmiş 64-bitlik sürümleri var, psloggedon64.exe ve psshutdown64.exe gibi.

Başka bir yöntem quser ve logoff komutları. 

quser /server:sunucu
USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
user.name           console             2  Active    5+23:13  2024-09-16 09:06

Burada ID sütunundaki 2 değerini not alalım. Bunu kapatılacak oturum kimliği olarak kullanacağız, aşağıdaki gibi.

logoff 2 /server:sunucu

Bir de powershell yöntemi var, RemoteDesktop modülü ile gelen

Invoke-RDUser -HostServer sunucu -UnifiedSessionId 2 -Force

2, quser ile elde edilen oturum kimliği

19.09.2024

Powershell'de split

String tipindeki bir değişkeni bir array nesnesine dönüştürmek için split operatörünü kullanabiliriz:

$giris="Pazartesi Salı Çarşamba Perşembe Cuma Cumartesi Pazar"
$giris -split " "
Pazartes
Salı
Çarşamba
Perşembe
Cuma
Cumartesi
Pazar

Ya da ConvertFrom-String cmdlet'ini kullanabiliriz:

$giris | ConvertFrom-String
P1 : Pazartesi
P2 : Salı
P3 : Çarşamba
P4 : Perşembe
P5 : Cuma
P6 : Cumartesi
P7 : Pazar

Ayırma karakterinin boşluktan başka bir karakter olması durumunda, örneğin bir noktalı virgül için, şu kullanımlar mümkün:

$giris -split ";"

ya da

$giris | ConvertFrom-String -Delimiter ";"

Ama bazen birden fazla boşluk karakteri ile ayrılmış string'ler olur. Bu durumda regular expressions kullanılabilir:

$giris = "pazartesi                      salı                cumartesi"
$giris -split " +"

ya da

$giris -split "\w+"