5.10.2023

telnet yerine ncat

Amacım, Dell switch'lerin üzerinde bir MAC adresi araması yapmak. Bunu tek tek switch'lere telnet ile bağlanarak yapabilirim. Örneğin

> telnet 192.168.7.1
User: birkullanici
Password: **************
show mac address-table | include AB:CD:EF:01:23:45
quit

gibi bir yöntemle yapmak mümkün. Ama bunu birden fazla switch için tekrarlamak yorucu. Bir betik ile yapmak istesem, telnet, bildiğim kadarıyla otomasyona açık değil. vbs scriptleri içinde SendKeys() kullanmak gibi bir şansımız var, ama onu da çok takdir ettiğimi söyleyemem.

Nihayet, başka bir yöntem buldum. telnet yerine ncat kullanarak bu işi otomatikleştirebildim. Öncelikle ncat'e göndermem gereken komutları bir string nesnesinde birleştirmeliyim. Bunu powershell'de bir değişkende toplayacağım. Önce kullanıcı adı ve şifremi yazıp daha sonra show mac address-table komutunu bu değişkene ekleyeceğim. Elbette aradığım MAC adresini de eklemem gerek. Ama Dell switch'ler MAC adresini iki nokta üst üste (:) veya tire (-) karakteriyle değil, nokta ile ayrılmış 4'lü gruplardan oluşmasını istiyor. Örneğin

AB:CD:EF:01:23:45 veya AB-CD-EF-01-23-45

değil,

ABCD.EF01.2345

olmalı. Genelde MAC adresi girişini ilk verdiğim iki formattan birinde verebildiğim için bunu betiğin içinde dönüştürmeliyim. ncat'e göndereceğim komutları içeren string değişkenini oluşturduğum betiğin ilk kısmını şu şekilde yazdım:

param(
    [Parameter(Mandatory=$true)][string]$mac
)
$mac=$mac.Replace(":","").Replace("-","")
$mymac=$mac.Insert(4,".").Insert(9,".")
$data = "birkullanici`r`nPAROLA`r`nshow mac address-table | include $mymac`r`nquit`r`n"

birkullanici switch'i yönetmek için kullandığımız kullanıcı adımız, büyük harflerle yazdığım PAROLA da parolamız. Bu işleri Windows'da powershell ile yapıyorum. Enter karakteri olarak da hem carriage return (`r) hem de line feed (`n) kullandım. Bundan sonra switch'lerimizin IP adreslerinin bir dizi (array) tipinde bir değişkende ($cihazlar) olduğunu varsayalım. İstersek bu diziyi elle doldurabilir, istersek bir dosyadan okuyabiliriz. Bu doğrultuda betiğimizin ikinci kısmını şu şekilde yazabiliriz:

foreach ($cihaz in $cihazlar) {
    $out = data | ncat -C $cihaz 23
    $out | select-string $mac
}

Bu iki parça birleştirilince her switch'in mac adres tablosunda yer alan kayıtlar sırasıyla gösterilecektir.

Hiç yorum yok: