【Python】スイッチの設定情報からポート収容表を自動作成してみた!
IT技術
スイッチの設定情報から自動でポート収容表を作る
インフラエンジニアがネットワーク構築する際の参考資料に、各機器のポート収容表があります。
しかし、コンフィグが変わるたびに、いちいち主導で更新するのは大変ですよね…
そこで、今回は、スイッチの設定情報からポート収容表を自動作成してみようと思います!
実行環境
筆者の実行環境は、以下の通りです。
- OS:Mac OS X 10.15.6
- Cisco シミュレータ:Packet Tracer 7.3
- Python バージョン:3.8.6
Packet Tracer とは?
Packet Tracer は、Cisco の公式ネットワークシミュレータです。
実機がなくても、PC 内の作業だけで手軽にネットワークを構築することができます。
Window や Mac などほぼ全てのユーザーに対応しており、無料で使えます。
ただ、Cisco Network Academy のアカウントが必須だったりと、インストールまでの手順が少し多いため、以下を参考にしてください。
【Cisco シミュレータ Packet Tracer のインストール】
https://qiita.com/suzuyui/items/76764d7fc4b4183a7d45
既存ネットワーク
既存ネットワークとして、以下のようなネットワークを構成します。
PC1 と PC3 が接続されたポートを「VLAN10」、PC2 が接続されたポートを「VLAN20」に設定し、スイッチの0/11~0/24ポートをシャットダウンにしています。
各 PC の IP 設定
PC1 | 192.168.0.1/24 |
PC2 | 192.168.0.2/24 |
PC3 | 192.168.0.3/24 |
Switch1 の設定コンフィグ
以下、変更部分のみ示します。
1!
2hostname Switch1
3!
4interface FastEthernet0/1
5 switchport access vlan 10
6 switchport mode access
7!
8interface FastEthernet0/2
9 switchport access vlan 20
10 switchport mode access
11!
12interface FastEthernet0/3
13 switchport access vlan 10
14 switchport mode access
15!
16interface FastEthernet0/11
17 shutdown
18!
19interface FastEthernet0/12
20 shutdown
21!
22interface FastEthernet0/13
23 shutdown
24!
25interface FastEthernet0/14
26 shutdown
27!
28interface FastEthernet0/15
29 shutdown
30!
31interface FastEthernet0/16
32 shutdown
33!
34interface FastEthernet0/17
35 shutdown
36!
37interface FastEthernet0/18
38 shutdown
39!
40interface FastEthernet0/19
41 shutdown
42!
43interface FastEthernet0/20
44 shutdown
45!
46interface FastEthernet0/21
47 shutdown
48!
49interface FastEthernet0/22
50 shutdown
51!
52interface FastEthernet0/23
53 shutdown
54!
55interface FastEthernet0/24
56 shutdown
57!
疎通確認
ここまで済んだら、既存ネットワークがきちんと成立しているか、確認しましょう。
1# PC1→PC2はVLANが違うので通信できない
2C:\>ping 192.168.0.2
3
4Pinging 192.168.0.2 with 32 bytes of data:
5
6Request timed out.
7Request timed out.
8Request timed out.
9Request timed out.
10
11Ping statistics for 192.168.0.2:
12 Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
13
14# PC1→PC3はVLANが等しいので通信できる
15C:\>ping 192.168.0.3
16
17Pinging 192.168.0.3 with 32 bytes of data:
18
19Reply from 192.168.0.3: bytes=32 time<1ms TTL=128
20Reply from 192.168.0.3: bytes=32 time<1ms TTL=128
21Reply from 192.168.0.3: bytes=32 time<1ms TTL=128
22Reply from 192.168.0.3: bytes=32 time<1ms TTL=128
23
24Ping statistics for 192.168.0.3:
25 Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
26Approximate round trip times in milli-seconds:
27 Minimum = 0ms, Maximum = 0ms, Average = 0ms
それでは、いよいよ収容表を作成していきます!
スイッチの設定情報を取得
今回は、「ポート情報」と「コンフィグ情報」の show 結果のみ取得します。
実際の現場では TeraTerm で接続するため、自動でログが取れます。
1Switch1#show interfaces status
2Port Name Status Vlan Duplex Speed Type
3Fa0/1 connected 10 auto auto 10/100BaseTX
4Fa0/2 connected 20 auto auto 10/100BaseTX
5Fa0/3 connected 10 auto auto 10/100BaseTX
6Fa0/4 disabled 1 auto auto 10/100BaseTX
7Fa0/5 notconnect 1 auto auto 10/100BaseTX
8
9〜(略)〜
10
11Fa0/23 disabled 1 auto auto 10/100BaseTX
12Fa0/24 disabled 1 auto auto 10/100BaseTX
13Gig0/1 notconnect 1 auto auto 10/100BaseTX
14Gig0/2 notconnect 1 auto auto 10/100BaseTX
15Switch1#
16Switch1#
17Switch1#show running-config
18Building configuration...
19
20Current configuration : 1384 bytes
21!
22version 12.2
23no service timestamps log datetime msec
24
25〜(略)〜
26
27line vty 5 15
28 login
29!
30!
31!
32!
33end
log にスイッチの設定を保存
作業フォルダ配下に log フォルダを作成し、その中にスイッチの設定情報をコピペしたら、テキストファイルで保存します。
1$ ls log
2Switch1_log.txt
ポート収容表を作成
上記で取得したスイッチの設定情報から、以下の4つを取得し、CSV 形式で出力します。
- ホスト名
- ポート
- VLAN
- ステータス
pandas をインストール
今回は、データ解析に優れた pandas ライブラリを使います。
1$ sudo easy_install pip # pipがインストールされていない場合は実行
2$ pip install pandas
収容表を作成
以下が、ソースコード「create_port_table.py」です。
1# -*- coding: utf-8 -*-
2import re
3import csv
4import pandas as pd
5import os
6
7
8# 対象文字列が含まれる行を抜き出す関数
9def grep(str,path):
10 # ファイルを読み込む
11 with open(path) as f:
12 lines = f.readlines()
13 # 改行コードを削除
14 lines_strip = [line.strip() for line in lines]
15 # 対象文字列が含まれる行を抜き出す
16 lines_str = [line for line in lines_strip if str in line]
17 return lines_str
18
19# ログファイルパス
20log_path = "./log/Switch1_log.txt"
21# ホスト名取得
22host_name = (grep("hostname",log_path))[0]
23# FastEthernetのポート情報を読み込む
24lines_fa = grep("Fa0",log_path)
25# GigabitEthernetのポート情報を読み込む
26lines_gig = grep("Gig0",log_path)
27# FastEthernetの情報にGigabitEthernetの情報を追記する
28lines_fa.extend(lines_gig)
29# 列名を追加
30lines_fa.insert(0, "port status VLAN Duplex Speed Type")
31# 複数の空白をカンマに置換
32lines_fa_gig = [re.sub(' +',',' ,str(fa)) for fa in lines_fa]
33# csv作成
34with open('./port_table.csv', 'w') as f:
35 f.write('\n'.join(lines_fa_gig))
36port_csv = pd.read_csv('./port_table.csv', index_col=0)
37# 不要な列を消す
38port_csv_rm = port_csv.drop(columns=['Duplex','Speed','Type'])
39# CSV更新
40port_csv_rm.to_csv('./port_table_tmp.csv')
41# ホスト名を先頭に追記
42with open('./port_table.csv', 'w') as f:
43 f.write(host_name + '\n')
44with open('./port_table_tmp.csv') as f:
45 buff = f.read()
46with open('./port_table.csv', 'a') as f:
47 f.write(buff)
48# 一時ファイルの削除
49os.remove('./port_table_tmp.csv')
実行結果
それでは、実行してみましょう!
1# 実行
2$ python create_port_table.py
3# csvが作成される
4$ ls
5create_port_table.py log port_table.csv
6# csv(ポート収容表)の中身確認
7$ cat port_table.csv
8hostname Switch1
9port,status,VLAN
10Fa0/1,connected,10
11Fa0/2,connected,20
12Fa0/3,connected,10
13Fa0/4,disabled,1
14Fa0/5,notconnect,1
15Fa0/6,notconnect,1
16Fa0/7,notconnect,1
17Fa0/8,notconnect,1
18Fa0/9,notconnect,1
19Fa0/10,notconnect,1
20Fa0/11,disabled,1
21Fa0/12,disabled,1
22Fa0/13,disabled,1
23Fa0/14,disabled,1
24Fa0/15,disabled,1
25Fa0/16,disabled,1
26Fa0/17,disabled,1
27Fa0/18,disabled,1
28Fa0/19,disabled,1
29Fa0/20,disabled,1
30Fa0/21,disabled,1
31Fa0/22,disabled,1
32Fa0/23,disabled,1
33Fa0/24,disabled,1
34Gig0/1,notconnect,1
35Gig0/2,notconnect,1
簡易的なポート収容表が作成できました!
さいごに
以上、スイッチの設定情報からポート収容表を自動作成してみました。
今回は、python でファイル操作・テキスト処理をしましたが、正直「Bash」や「Perl」「PowerShell」の方が簡潔に書けると思います。
しかし、python をうまく活用すれば、このように作業を簡略化できます。
ぜひ、一度試してみてくださいね!
こちらの記事もオススメ!
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
2020.07.30Python 特集実装編※最新記事順Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみた!P...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit