Pythonでお手軽ネットワーク運用
はじめに
ども、とみた(@_tamitom)です。
今回はPythonのコードを紹介したいと思います。
Pythonができる訳では無いのですが、、日経ネットワークの特集で『Pythonを使ってネットワーク自動運用』というインフラエンジニアが食い付く特集があったので、食い付いて見ました(笑)
時代はコード化&自動化なんですよね。
これを気に本気でPythonマスターになりたいと思いました。
今回は、Pythonを使って、ネットワーク機器(Cisco)にSSHでログインして、簡単なコマンドを実行する所までやってみたいと思います。
やり方
Pythonが実行できる環境が必要です。WindowsでもMacでも構いません。
操作対象となるネットワーク機器も必要です。
PythonでPingコマンド
まずはじめにPingコマンドをPythonを介して実行してみたいと思います。
複数宛先に対してPingを1回実行し、応答があればOK、応答がなければNGを返す様にします。
destinations.txtというファイルを準備して、IPアドレスを複数行記載しておきます。
import subprocess
#Ping結果のリターンコード取得
def is_reached(dest):
p = subprocess.run(["ping", dest, "-t", "1"],
stdout=subprocess.PIPE)
return p.returncode == 0
#宛先をファイルから読み込んで実行
with open('destinations.txt', 'r') as f:
for line in f:
dest = line.strip()
print(dest)
print("OK" if is_reached(dest) else "NG")
PythonでSSHログイン
続いて、netmikoというライブラリを使用して、ネットワーク機器にSSHログインして、showコマンドを叩いてから切断してみます。
from netmiko import ConnectHandler
#接続設定
my_device = {
'device_type': 'cisco_ios',
'host': 'IPアドレス',
'username': 'ユーザー名',
'password': 'パスワード',
'port' : 22,
'secret': 'enableパスワード',
}
#接続
net_connect = ConnectHandler(**my_device)
net_connect.enable()
#コマンド実行
output = net_connect.send_command('sh ip int b')
print(output)
#切断
net_connect.disconnect()
Pythonで設定変更
続いて、特定のポートの状態を取得してから、ポートをshutして、再度ポートの状態を取得してから切断してみます。
from netmiko import ConnectHandler
#接続情報
my_device = {
'device_type': 'cisco_ios',
'host': 'IPアドレス',
'username': 'ユーザー名',
'password': 'パスワード',
'port' : 22,
'secret': 'enableパスワード',
}
#接続
net_connect = ConnectHandler(**my_device)
net_connect.enable()
#コマンド実行_ポートステータス確認
output = net_connect.send_command("sh int インターフェイス名 status")
print(output)
#コマンド実行_ポートステータス変更
command = ["interface インターフェイス名", "shutdown"]
net_connect.send_config_set(command)
#コマンド実行_ポートステータス確認
output = net_connect.send_command("sh int インターフェイス名 status")
print(output)
#切断
net_connect.disconnect()
Pythonで設定前後のログを吐き出して設定変更
最後に、設定変更前後のログをcsvに吐き出す設定をして、ポートをno shutします。
csvに吐き出すにはTextFSMというライブラリとntc-templatesというテンプレートが必要です。
from netmiko import ConnectHandler
import pandas as pd
#接続情報
my_device = {
'device_type': 'cisco_ios',
'host': 'IPアドレス',
'username': 'ユーザー名',
'password': 'パスワード',
'port' : 22,
'secret': 'enableパスワード',
}
#log設定
def csv_log(f):
output = net_connect.send_command("sh int status", use_textfsm=True)
df = pd.DataFrame(output)
df.to_csv(f, index=False)
print("output "+f)
#接続
net_connect = ConnectHandler(**my_device)
net_connect.enable()
#事前ログ取得
csv_log("before.csv")
#コマンド実行_ポートステータス変更
command = ["interface インターフェイス名", "no shutdown"]
net_connect.send_config_set(command)
#事後ログ取得
csv_log("after.csv")
#切断
net_connect.disconnect()
これいいですね。
TeraTermなどからエディタにコピペする手間が省けます。
まとめ
プログラミングを始めると、いつもHello Worldで終わってしまうんですが、※Pythonの場合はprint("Hello World") Pythonの様にライブラリが豊富で、自分の得意分野にも利用できるライブラリがあると、そこから始めよう!という気になって良いなと思いました。
機械学習にも興味はあるので、これを気にPythonを勉強していきたいと思います。
目指せPythonマスター!!
〆
この記事が気に入ったらサポートをしてみませんか?