Network Otomasyon Netmiko

 Network Otomasyon Netmiko 

Netmiko kütüphanesi ile telnet/SSH protokolleri üzerinden ağ cihazlarına bağlanabilirsiniz. Netmiko, SSH ve Telnet protokollerini destekler, bu nedenle bağlantıyı sağlamak için device_type parametresini cihazınıza uygun bir diğer device_type değerine ayarlayarak bağlantı yapabilirsiniz.

Örneğin, bir Cisco cihazına telnet üzerinden bağlanmak için:

from netmiko import ConnectHandler
device = {
    'device_type': 'cisco_ios_telnet',
    'ip': 'cihaz_ip_adresi',
    'username': 'kullanici_adi',
    'password': 'parola',
}
net_connect = ConnectHandler(**device)

Ancak, unutulmaması gereken önemli bir nokta var. SSH, güvenli bir bağlantı protokolüdür ve genellikle telnet yerine tercih edilir. Eğer mümkünse, cihazınız SSH üzerinden bağlantıya izin veriyorsa, bu daha güvenli bir seçenektir. Telnet, verileri şifrelemeden gönderdiği için güvenli olmayabilir.

Netmiko ile bağlanırken device_info sözlüğüne cihazın bağlantı bilgilerini eklemelisiniz. Bu bilgiler, bağlanmaya çalıştığınız cihazın türüne ve yapılandırmasına göre değişecektir.

Netmiko device_info bilgiler

Temelde, device_info sözlüğünde aşağıdaki temel bilgiler olması gerekir:

device_type: Bağlanmaya çalıştığınız cihazın türünü belirtir (örneğin, 'cisco_ios', 'cisco_xr', 'juniper_junos', vb.).

ip: Cihazın IP adresi.

username: Cihaza erişim için kullanıcı adı.

password: Kullanıcı parolası.

Netmiko device_info diğer bilgiler

device_info sözlüğüne ek olarak, cihazın özelliklerine ve gereksinimlerine bağlı olarak çeşitli diğer parametreleri ekleyebilirsiniz. İşte bazı yaygın parametreler:

port: Cihaza bağlanmak için kullanılacak port numarası (örneğin, 22 için SSH, 23 için Telnet).

secret: Cihazda "enable" moduna geçiş için kullanılan parola.

global_delay_factor: Komut gönderimlerinin ve cevap almanın arasındaki zaman gecikmesini ayarlar. Varsayılan olarak 1'dir.

fast_cli: Eğer destekleniyorsa, bu parametre True olarak ayarlanarak, komut gönderme işlemlerinin hızlandırılmasını sağlar.

session_log: Bağlantı üzerindeki etkileşimleri bir dosyaya kaydetmek için kullanılır.

session_log_record_writes: True olarak ayarlanırsa, her yazma işlemi log dosyasına kaydedilir.

auto_find_prompt: True olarak ayarlandığında, cihazın komut istemcisini otomatik olarak algılar.

use_keys: Eğer cihazın anahtar tabanlı kimlik doğrulama kullanıyorsa, bu parametre True olarak ayarlanmalıdır.

key_file: Anahtar tabanlı kimlik doğrulama için kullanılacak özel anahtar dosyasının yolu.

alt_host_keys: Eğer cihaz farklı anahtarları kullanıyorsa, bu parametre True olarak ayarlanmalıdır.

alt_key_file: Farklı anahtarlar kullanılıyorsa, bu parametre ile kullanılacak anahtar dosyasının yolu belirtilir.

alt_passwords: Eğer cihaz farklı parolalar kullanıyorsa, bu parametre ile kullanılacak parolalar belirtilir.

alt_secret: Eğer farklı bir "enable" parolası kullanılıyorsa, bu parametre ile belirtilir.

verbose: Daha fazla ayrıntı için bu parametre True olarak ayarlanabilir.

Bu, sadece bazı örnek parametrelerdir. Cihazın türüne ve gereksinimlerine bağlı olarak, farklı parametreler de kullanılabilir. Bu nedenle, belgeleri inceleyerek doğru parametreleri belirlemeniz önemlidir.

netmiko.redispatch() fonksiyonu, Bir ağ cihazının türünü dinamik olarak tanımlamak için kullanılır.

Özellikle, bir cihaza ilk olarak bağlandığınızda, belirli bir cihaz türü için yapılandırılmış bir bağlantı yapısı oluşturursunuz (örneğin, cisco_ios için). Ancak bazen cihazın türünü önceden bilmiyorsanız veya oturum açtıktan sonra cihazın türü değişirse, bu durumda redispatch() fonksiyonunu kullanarak cihazın türünü dinamik olarak belirleyebilirsiniz.

from netmiko import ConnectHandler
# Cihazın bağlantı bilgilerini belirtin
device = {
    'device_type': 'autodetect',  # Dinamik olarak cihaz türünü belirle
    'ip': 'cihaz_ip_adresi',
    'username': 'kullanici_adi',
    'password': 'parola',
    'secret': 'enable_parola',  # Enable modu için gerekli ise
}
# Cihaza bağlantı yap
net_connect = ConnectHandler(**device)
# Cihaz türünü dinamik olarak belirle
device_type = net_connect.device_type
netmiko.redispatch(net_connect, device_type=device_type)
# Cihaza bir komut gönder
output = net_connect.send_command('show interfaces')
# Çıktıyı ekrana yazdır
print(output)

Netmiko bağlantı fonksiyoanları

ConnectHandler(): Bu fonksiyon, belirtilen bağlantı parametrelerine göre bir ağ cihazına bağlantı yapar.

from netmiko import ConnectHandler
device = {
    'device_type': 'cisco_ios',
    'ip': 'cihaz_ip_adresi',
    'username': 'kullanici_adi',
    'password': 'parola',
    'secret': 'enable_parola',  # Opsiyonel: Enable modu için gerekli ise
}
net_connect = ConnectHandler(**device)

ConnectHandler.from_dict(): Bu fonksiyon, bir cihazın bağlantı bilgilerini bir sözlükten alır.

device_info = {
    'device_type': 'cisco_ios',
    'ip': 'cihaz_ip_adresi',
    'username': 'kullanici_adi',
    'password': 'parola',
    'secret': 'enable_parola',  # Opsiyonel: Enable modu için gerekli ise
}
net_connect = ConnectHandler.from_dict(device_info)

ConnectHandler.from_input_string(): Bu fonksiyon, bir JSON veya YAML formatındaki cihaz bilgilerini alır.

device_info_json = '''
{
    "device_type": "cisco_ios",
    "ip": "cihaz_ip_adresi",
    "username": "kullanici_adi",
    "password": "parola",
    "secret": "enable_parola"
}
'''
net_connect = ConnectHandler.from_input_string(device_info_json)

ConnectHandler.from_file(): Bu fonksiyon, bir JSON veya YAML dosyasından cihaz bilgilerini okur.

net_connect = ConnectHandler.from_file('device_info.json')

is_alive: Bu fonksiyon, cihazın hala çevrimiçi olup olmadığını kontrol eder.

if net_connect.is_alive():
    print("Cihaz çevrimiçi.")
else:
    print("Cihaz çevrimdışı.")

Netmiko komut gönderme fonksiyonları

net_connect.write_channel() metodu, cihaza veri göndermek için kullanılır.

net_connect.write_channel("Komut" + ' \r\n')

send_command(): Bu fonksiyon, bir komutu cihaza gönderir ve cevabını döndürür. 

output = net_connect.send_command('show interfaces')

send_command_expect(): Bu metot, belirtilen komutu cihaza gönderir ve ardından belirtilen bir dizeyi bekler. Bu metot, beklenen dizeyi görene kadar cihazdan gelen yanıtı döndürmez. expect_string="Info:": Bu parametre, cihazdan beklenen dizedir. Yani, cihazın yanıtında bu dizenin bulunması beklenir. Eğer bu dize bulunmazsa, metot beklemeye devam eder.

output = net_connect.send_command_expect(' \n', expect_string="Info:")

send_config_set(): Bu fonksiyon, yapılandırma komutlarını cihaza gönderir. Birden fazla komutu içeren bir liste veya bir string'i kabul eder. Örneğin:

config_commands = ['interface Loopback0', 'ip address 192.168.1.1 255.255.255.255']

output = net_connect.send_config_set(config_commands)

send_command_timing(): Bu fonksiyon, komutları gönderir ve bekler. Eğer cihaz hızlı yanıt veriyorsa veya bekleme süresi beklenmiyorsa bu fonksiyon kullanılabilir. Örneğin:

output = net_connect.send_command_timing('show interfaces')

send_config_from_file(): Bu fonksiyon, bir dosyadan yapılandırma komutlarını cihaza gönderir. Örneğin:

output = net_connect.send_config_from_file('config_commands.txt')

commit() (yalnızca bazı cihazlarda): Bu fonksiyon, yapılandırma değişikliklerini cihaza uygular. Örneğin:

net_connect.commit()

read_channel(): fonksiyonu, bağlantı kanalından (connection channel) gelen verileri okumak için kullanılır. Bu fonksiyon, özellikle düşük seviyeli ağ iletişimi gerektiren durumlarda kullanılır.

Özetle, net_connect.read_channel() ile cihazın yanıtlarını doğrudan okuyabilirsiniz. Ancak, bu yöntem genellikle daha ileri seviyeli fonksiyonlar (send_command(), send_command_expect()) kullanılarak otomasyon işlemleri için tercih edilir.

İşte net_connect.read_channel() fonksiyonunun nasıl kullanılacağına dair basit bir örnek:

output = net_connect.read_channel()

print(output)

Bu örnekte, net_connect.read_channel() fonksiyonu cihazdan gelen verileri okur ve bu verileri output değişkenine atar. Daha sonra print(output) komutu ile bu veriyi ekrana yazdırabilirsiniz.

Unutmayın ki bu yöntem, cihazın yanıtlarını doğrudan işlemek için kullanılır ve yanıtların formatına bağlı olarak bu verileri işlemek zor olabilir. Bu nedenle, genellikle daha yüksek seviyeli fonksiyonları kullanarak cihaz ile etkileşimde bulunmak daha yaygındır.

bekleme süresini ayarlamak için 

Netmiko ekran (Prompt) okuma fonksiyonları

output = net_connect.find_prompt()

veya

output = net_connect.read_channel(timeout=10)



    

Google