Pythonでお手軽ネットワーク運用
見出し画像

Pythonでお手軽ネットワーク運用

とみた 2.4

はじめに

ども、とみた(@_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マスター!!

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
😳
とみた 2.4
インフラエンジニア💻 x 2児のパパ👨‍👩‍👧‍👧 ‖ 元ISPインフラエンジニア⇢アンダーアーマー(ドーム)👨🏻‍💻 ‖ スポーツxデジタル ‖ 技術ネタはブログにhttps://www.gachatsuku.com/ それ以外はnoteに