NEC IXシリーズから情報を取得するやつをつくった

telnetで簡単に作れそうだったので、しばらく前に作ってみました。

スクリーンショット_2016-04-23_19-39-20

python3 ./ix_tools.py 192.168.0.1 username password とすると動きます。

一番欲しかったのはARPとDHCPリースですね。これで適当に機械をつないだ時にそれのIPアドレスが一発でわかります。コマンドの追加は自由に可能です。もっと綺麗な仕組みにしても良かったですが、これだけで十分なので。なぜかIXはタイミングの問題かPythonからtelnetの一切のオプションを送るとセッションを切られるので、set_option_negotiation_callback(lambda x,y,z:None)とやることでオプションの送出をカットしています。


#!/usr/bin/env python3
from telnetlib import Telnet
from sys import argv
from time import sleep
prompt1 = b"IX2015# "
prompt2 = b"IX2015(config)# "
command1 = b"show uptime\r"
command2 = b"show arp entry\r"
command3 = b"en\rshow ip dhcp lease\rexit\r"
command4 = b"show clock\r"
command5 = b"show env\r"
#HOST = input("Enter your IX\'s IP addr: ")
#user = input("Enter your remote account: ").encode('ascii')
#password = getpass.getpass().encode("ascii")
HOST = argv[1]
user = argv[2].encode('ascii')
password = argv[3].encode('ascii')
def send_command(command):
#delete prompt
def check_prompt(txt):
if txt.find(prompt1.decode("ascii"))==\
txt.find(prompt2.decode("ascii"))== 1:
return txt.replace("\r", "\n")
else:
return ''
tn.write(command)
raw_msg = tn.read_until(prompt1).decode('ascii')
#remove the first line
clear_msg = ''.join(list(map(check_prompt, raw_msg.split('\n')[1:])))
return clear_msg
tn = Telnet()
#block any option
tn.set_option_negotiation_callback(lambda x,y,z:None)
tn.open(HOST)
#login and cut welcome messages
tn.read_until(b"login: ")
tn.write(user + b"\r")
tn.read_until(b"Password: ")
tn.write(password + b"\r")
tn.read_until(prompt1)
tn.write(b"\r")
tn.read_until(prompt1)
print("—–clock—–")
print(send_command(command4))
print("—–uptime—–")
print(send_command(command1))
print("—–env—–")
print(send_command(command5))
print("\n—–ARP—–")
print(send_command(command2))
print("\n—–DHCP—–")
print(send_command(command3))
tn.write(b"exit\r")

view raw

ix_tools.py

hosted with ❤ by GitHub

カテゴリー: Uncategorized パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中