25.11.2025

Linux sunucuya yapılan bağlantıları görmek

SSH örneği üzerinden gidelim. Varsayılan SSH portu tcp/22. Çoğu dağıtımda ss komutu yüklü gelir.

ss -tpn

Çok fazla bağlantı varsa sadece 22 portu süzmek için

ss -tpn | grep :22 
-t : tcp
-p : bağlantı ile ilişkili prosesleri göster
-n : portları nümerik olarak listele, hizmet isimlerini gösterme

Başka bir yöntem lsof kullanmak.

sudo lsof -i

Sadece 22 numaralı portu görmek için aşağıdaki notasyon yeterli.

sudo lsof -i :22

ssh bağlantılarına özel who veya w komutları da kullanılabilir.

who
user1    pts/0        2025-11-25 14:15 (192.168.17.8)
w komutu da aşağıdaki gibi
w
 15:59:14 up  3:44,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU  WHAT
user1              192.168.17.8         14:15          3:29m  0.00s  0.04s sshd: user1 [priv]

Linux için son seçenek diye birşey olmaz, daha çok seçenek vardır eminim ama bir de last komutu var.

last
user1     pts/0        192.168.17.8       Tue Nov 25 14:15   still logged in

Eğer son satırda "still logged in" yazıyorsa bağlantı hala devam ediyordur. Aşağıdaki gibiyse bağlantı 14:30'da sonlanmış demektir.

last
user1     pts/0        192.168.17.8       Tue Nov 25 14:15 - 14:30 (00:15)


19.11.2025

Dell switch yapılandırmasını bir dosyaya kaydetmek

Dell OpenManage switch serisinde yapılandırmayı bir dosyaya kaydetmenin otomatik bir yolu yok. Ama komut satırından telnet ile giriş yapıldığında ekrana bunu basabiliyor. Bunu kopyala yapıştıra gerek kalmadan nasıl bir dosyaya atabilirim?

$kullanici="kullanici"
$parola="gizliparola"
$komut1="enable"    # running-config komutunu etkinleştir
$komut2="terminal length 0" # Sayfa sonlandırmayı devre dışı bırak
$komut3="show running-config all" # Tüm yapılandırmayı göster
$komut4="quit"      # Oturumu sonlandır
$birlesik_komut="$kullanici`r`n$parola`r`n$komut1`r`n$komut2`r`n$komut3`r`n$komut4`r`n"

$birlesik_komut | ncat -C 192.168.7.151 23 | out-file dellconfig151.txt

Bunun sonunda mevcut klasörde dellconfig151.txt dosyasında bir yapılandırma dosyamız oluşur. $kullanici ve $parola değişkenlerini ve switch IP adresini değiştirmeyi unutmamak lazım.

ncat, telnet'e kıyasla daha kullanışlı.

enable ve terminal length 0 gibi komutlar oturum başına değişiklik yapıyor, kalıcı değil. 

11.11.2025

Ping ile gönderilen veri

En çok kullanılan sorun gideme aracımız ping. Windows'da her ping varsayılan 4 adet ICMP paketi gönderir, karşı tarafın da aynı sayıda ICMP paketi ile cevap vermesini bekler. Linux'ta varsayılan gönderme sayısı sınırsızdır. Ctrl+C'ye basana kadar gönderir. Windows'da her seferinde 32 byte gönderildi, 32 byte alındı gibi bir bilgilendirme görüntülenir, başarılı gönderme ve alma işlemleri için. Linux'ta da 48 byte'tır bu miktar.

Peki ne gönderir bu arkadaş? Windows'da abcd.. ile başlayan yapay bir veri gönderildiğini biliyordum. Ama powershell'in Test-Connection veya Linux'un ping'inin, Sysinternals'ın psping'inin veya Nirsoft'un PingInfoView'unun ne gönderdiğini bilmiyordum.

Windows ping aracı: abcdefghijklmnopqrstuvwabcdefghi

Test-Connection:    abcdefghijklmnopqrstuvwabcdefghi

Linux png:          <º______________________!"#$%&'()*+,-./01234567 

psping:             aralarına 0x00 yerleştirilmiş veri

PingInvoView:       tamamen rastgele karakterler 

Linux ping aracı 48 byte veri gönderiyor. Alt tire karakteri "_" ile gösterdiğim alanlar 0x00 ile 0x20 arasında basılamayan karakterler. Benzer şekilde sysinternals aracı psping de her harf arasına 0x00 yerleştirilmiş (UTF16 ?), bir yerden okunan (nereden, bulamadım) bazı karakter veri gönderiyor. Her seferinde farklı içerik.

Alıcı ister Windows olsun, ister Linux, farketmez. Gönderen ne gönderdiyse aynı şekilde cevap geliyor. Bunun bazı istisnaları yok değil ama bu durum konumuzun dışında.

10.11.2025

Powershell ErrorVariable parametresi

Alışık olduğum kullanımın dışında yeni bir kullanım buldum [1].

Normalde şöyle yapardım (örnek senaryo):

Invoke-Command -Computername (Get-Content D:\pclist.txt) {
    hostname
} -ErrorAction SilentlyContinue

Bu şekilde pclist.txt dosyasında yazan bilgisayarlar üzerinde hostname komutu çalıştırılarak bilgisayar ismi yazılır. Ulaşılamayan her bir bilgisayar için hata vermesini istemediğimden -ErrorAction SilentlyContinue kullandım.

Bu komut sonucunda hangi bilgisayarlarda hata ile karşılaştığımı göremedim. Ama hangi bilgisayarlarda çalıştığını gördüm.

Buna alternatif -ErrorVariable parametresi var. Takiben bir değişken adı girerek oluşan hatalar ile ilgili bir rapor alabilirim.

Invoke-Command -Computername (Get-Content D:\pclist.txt) {
    hostname
} -ErrorAction SilentlyContinue -ErrorVariable Hatalar

foreach ($Hata in $Hatalar) {
    "$($Hata.TargetObject) Bilgisayarina Baglanilamadi!"
}

Bu da güzel.

---

[1] https://www.networkadm.in/find-out-how-long-that-pc-has-been-running-with-get-uptime/ 

6.11.2025

Hafta numarasının hesaplanmasında yanlışlık

Daha önce yılın kaçıncı haftasında olduğumuzu gösteren

Get-Date -UFormat %V

komutu hakkında bir yazı yazmıştım

Bu sene 1 Ocak Çarşamba gününe denk geldi. Türkiye'de bu hafta yılın ilk haftası olarak kabul ediliyor. 6 Ocak Pazartesi günü de yılın ikinci haftası olarak kabul edilmeliydi. Ancak

Get-Date "2025-01-06" -UFormat %V

komutu bu tarih için 1 dönüyorken bir gün sonra 7 Ocak Salı günü için aşağıdaki komut

Get-Date "2025-01-07" -UFormat %V

2 dönüyor. ABD'ye kıyasla Türkiye'de haftanın ilk günü Pazartesi günü kabul ediliyor. Ayrıca yılın ilk haftasının hangi gün başlayacağı ile ilgili de farklı fikirler var. Örneğin 1 Ocak'ın Pazar gününe denk gelmesi durumunda yılın ilk haftası 2 Ocak'ta başlıyor olarak kabul edilebilyor. Bu durumda en az 4 güne sahip bir haftanın yılın ilk haftası kabul edilmesi gertiği yönünde bazı standartlar (IS-8601) oluşmuş. Claude.ai'a göre C çalışma zamanı kütüphanesi strftime, bu hatalardan sorumlu.

Çözüm olarak şöyle bir fonksiyon oluşturulması ve bunun kullanılması önerilmiş.

function Get-ISOWeekNumber {
    param([DateTime]$Date = (Get-Date))
   
    $cal = [System.Globalization.CultureInfo]::InvariantCulture.Calendar
    return $cal.GetWeekOfYear($Date, [System.Globalization.CalendarWeekRule]::FirstFourDayWeek, [DayOfWeek]::Monday)
}