Junos PyEZ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชตเชฟเชถเซเชจเซ เชฒเซเช - โPython microframework เชเซ เชเซ เชคเชฎเชจเซ Junos OS เชเชฒเชพเชตเชคเชพ เชเชชเชเชฐเชฃเซเชจเซ เชธเชเชเชพเชฒเชฟเชค เช เชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเชตเชพ เชธเชเซเชทเชฎ เชเชฐเซ เชเซโ เชเชเซเชฎเซเชถเชจ เช เชจเซ เชฎเซเชจเซเชเชฎเซเชจเซเช, เช เชฎเชจเซ เชเชฎเซ เชเซ. เช เชฒเซเชเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชธเซเชเซเชฐเชฟเชชเซเช เชฒเชเชตเชพเชจเชพ เชเชฃเชพ เชงเซเชฏเซเชฏเซ เชนเชคเชพ - เชชเชพเชฏเชฅเซเชจ เชถเซเชเชตเชพ เช เชจเซ เชเซเชจเซเชธ OS เชเชฒเชพเชตเชคเชพ เชธเชพเชงเชจเซ เชชเชฐ เชฎเชพเชนเชฟเชคเซ เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพ เช เชฅเชตเชพ เชเซเช เชตเชฃเซ เชฌเชฆเชฒเชตเชพ เชฎเชพเชเซเชจเชพ เชเชพเชฐเซเชฏเซเชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเชตเชพ. Python + Junos PyEZ เชจเชพ เช เชตเชฟเชถเชฟเชทเซเช เชธเชเชฏเซเชเชจเชจเซ เชชเชธเชเชฆเชเซ เชชเชพเชฏเชฅเซเชจ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชญเชพเชทเชพเชฎเชพเช เชชเซเชฐเชตเซเชถ เชฎเชพเชเซเชจเชพ เชเชเชพ เช เชตเชฐเซเชง เช เชจเซ เชเซเชจเซเชธ PyEZ เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเชพ เชเชชเชฏเซเชเชฎเชพเช เชธเชฐเชณเชคเชพเชจเซ เชเชพเชฐเชฃเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ, เชเซเชจเซ Junos OS เชจเชพ เชจเชฟเชทเซเชฃเชพเชค เชเซเชเชพเชจเชจเซ เชเชฐเซเชฐ เชจเชฅเซ.
เชเชฆเซเชฆเซเชถ
เชเชเชชเชจเซ เชธเชพเชฅเซ เชเซเชกเชพเชฏเซเชฒเชพ เชฎเชซเชค ipv4 เชธเชฌเชจเซเชเชจเซเช เชเชกเชฟเช. เชธเชฌเชจเซเช เชซเซเชฐเซ เชเซ เชคเซ เชฎเชพเชชเชฆเชเชก เช เชเซ เชเซ เชเซเชจเซเชธ OS เชชเชฐ เชเชพเชฒเชคเชพ เชฐเชพเชเชเชฐ เชคเชฐเซเชเซ เชเชพเชฎ เชเชฐเชคเชพ เชธเซเชตเซเช เชชเชฐเชจเชพ เชฐเซเชเซเชธเชฎเชพเช เชคเซเชจเชพ เชตเชฟเชถเซเชจเซ เชเชจเซเชเซเชฐเซเชจเซ เชเซเชฐเชนเชพเชเชฐเซ เชเซ.
ะ ะตะฐะปะธะทะฐัะธั
Python + Junos PyEZ, เชเซเชเซ paramiko เช
เชจเซ ssh.exec_command เชฆเซเชตเชพเชฐเชพ เชคเซ เชเชฐเชตเชพเชจเซ เชฒเชพเชฒเช เชนเชคเซ,
PyPI เชฎเชพเชเชฅเซ Junos PyEZ เชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซเช เชจเซเชเซเชจเชพ เชเชฆเซเชถ เชธเชพเชฅเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ:
$ pip install junos-eznc
เชคเชฎเซ เชจเซเชเซเชจเชพ เชเชฆเซเชถ เชธเชพเชฅเซ GitHub เชชเชฐ เชชเซเชฐเซเชเซเชเซเชเชจเซ เชฎเซเชเซเชฏ เชถเชพเชเชพเชฎเชพเชเชฅเซ เชชเชฃ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชถเชเซ เชเซ:
$ pip install git+https://github.com/Juniper/py-junos-eznc.git
เช เชจเซ เชเช เชตเชงเซ เชตเชฟเชเชฒเซเชช เชฆเซเชตเชพเชฐเชพ
$ pip install -r requirements.txt
เช เชเชฆเซเชถ เชฒเชพเชเชฌเซเชฐเซเชฐเซเช เชเชจเซเชธเซเชเซเชฒ เชเชฐเชถเซ เชเซ เชธเชฟเชธเซเชเชฎเชฎเชพเชเชฅเซ เชเซเชเซ เชเซ เช เชจเซ เชเชชเชฐเซเชถเชจ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเซ. เชฎเชพเชฐเชพ เชธเชเชธเซเชเชฐเชฃเชฎเชพเช เชเชฐเซเชฐเซเชฏเชพเชคเซ. txt เชคเซเชฎเชพเชเชจเชพ เชซเชเซเชค เชฌเซ เชเซ, เชจเชตเซเชจเชคเชฎ เชธเชเชธเซเชเชฐเชฃเซ เชธเซเชเซเชฐเชฟเชชเซเช เชฒเชเชคเซ เชตเชเชคเซ เชธเซเชเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ:
junos-eznc
netaddr
เชฎเซเชณเชญเซเชค เชฐเซเชคเซ เชธเซเชเซเชฐเชฟเชชเซเช เชธเชฟเชธเซเชเชฎเชฎเชพเช เชตเชฐเซเชคเชฎเชพเชจ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซเช เชจเชพเชฎ เชฒเซ เชเซ, เชคเชฎเซ show_route.py -u getpass.getpass เชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชจเซเชฏ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเชพ เชจเชพเชฎ เชนเซเช เชณ เชฒเซเช เชเชจ เชเชฐเซ เชถเชเซ เชเซ stdin เชฎเชพเชเชฅเซ เชชเชพเชธเชตเชฐเซเชก เชฒเซ เชเซ เชเซเชฅเซ เชชเชพเชธเชตเชฐเซเชก เชฐเชนเซ เชจเชนเซเช. เชธเชฟเชธเซเชเชฎเชฎเชพเช เชธเชพเชงเชจเชธเชพเชฎเชเซเชฐเซ เชธเชพเชฅเซ เชเซเชกเชพเชตเชพ เชฎเชพเชเซ, เชเซเชฏเชพเชฐเซ เชชเซเชเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ เชคเชฎเชพเชฐเซ เชคเซเชจเซเช เชนเซเชธเซเชเชจเชพเชฎ เช เชฅเชตเชพ IP เชธเชฐเชจเชพเชฎเซเช เชชเชฃ เชฆเชพเชเชฒ เชเชฐเชตเซเช เชชเชกเชถเซ. เชเชชเชเชฐเชฃ เชชเชฐ เช เชงเชฟเชเซเชคเชคเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชคเชฎเชพเชฎ เชกเซเชเชพ เชชเซเชฐเชพเชชเซเชค เชฅเช เชเชฏเซ เชเซ.
Junos PyEZ เช ssh เชฎเชพเชฐเชซเชคเซ เชเชจเซเชธเซเชฒ, เชเซเชฒเชจเซเช เช เชฅเชตเชพ เชจเซเชเชเซเชจเซเชซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ Junos OS เชเชฒเชพเชตเชคเชพ เชธเชพเชงเชจเซ เชธเชพเชฅเซ เชเชจเซเชเซเช เชฅเชตเชพเชจเซเช เชธเชฎเชฐเซเชฅเชจ เชเชฐเซ เชเซ. เชฒเซเช เชชเชเซเชจเชพ เชตเชฟเชเชฒเซเชชเชจเซ เชเชฐเซเชเชพ เชเชฐเซ เชเซ.
เชธเชพเชงเชจเซ เชธเชพเชฅเซ เชเซเชกเชพเชตเชพ เชฎเชพเชเซ, jnpr.junos เชฎเซเชกเซเชฏเซเชฒเชจเชพ เชเชชเชเชฐเชฃ เชตเชฐเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ
with jnpr.junos.Device(host=router,
user=args.name,
passwd=password) as dev:
เชฐเชฟเชฎเซเช เชชเซเชฐเซเชธเชฟเชเชฐ เชเซเชฒ เช เชฅเชตเชพ เชฐเชฟเชฎเซเช เชชเซเชฐเซเชธเชฟเชเชฐ เชเซเชฒ เชฆเซเชตเชพเชฐเชพ เชฐเชพเชเชเชฐเชจเซ เชเชพเชฃเซเชคเชพ เชคเชฎเชพเชฎ เชฐเซเชเซเชธ เชฎเชพเชเซ เชตเชฟเชจเชเชคเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซ เชตเชงเซ เช เชจเซเชเซเชณ เชนเซเชฏ.
data = dev.rpc.get_route_information()
เชเซเชจเซเชธ เชเชเชธ เชชเชฐ เชธเชฎเชพเชจ เชเชฆเซเชถ
user@router> show route | display xml
เชเชฆเซเชถเชจเชพ เช เชเชคเชฎเชพเช rpc เชเชฎเซเชฐเซเชจเซ, เช เชฎเชจเซ เชตเชฟเชจเชเชคเซ เชเซเช เชฎเชณเซ เชเซ เช เชจเซ เชคเซเชจเซ RPC เชชเชฆเซเชงเชคเชฟเชจเชพ เชจเชพเชฎ เชธเชพเชฅเซ เชฎเซเช เชเชฐเซ เชถเชเซเช เชเซเช, เช เชฐเซเชคเซ เชเชชเชฃเซ เชฐเชธเชจเชพ เช เชจเซเชฏ เชจเชพเชฎเซ เชถเซเชงเซ เชถเชเซเช เชเซเช. เชคเซ เชจเซเชเชงเชตเซเช เชฏเซเชเซเชฏ เชเซ เชเซ เชตเชฟเชจเชเชคเซ เชเซเช เชฒเชเชตเชพ เชฎเชพเชเซเชจเซ เชตเชพเชเซเชฏเชฐเชเชจเชพ เชชเชฆเซเชงเชคเชฟเชจเชพ เชจเชพเชฎเชฅเซ เช เชฒเช เชเซ, เชเชเชฒเซ เชเซ, เชคเชฎเชพเชฐเซ เชนเชพเชเชซเชจเซเชธเชจเซ เช เชจเซเชกเชฐเชธเซเชเซเชฐ เชธเชพเชฅเซ เชฌเชฆเชฒเชตเซเช เชเซเชเช.
user@router> show route | display xml rpc
<rpc-reply >route_list = data.xpath("//rt-destination/text()")
เชฌเชพเชเซเชจเซ เชญเชพเช เชฅเซเชกเซ เชธเชฎเชฏ เชฒเซเชชเชฎเชพเช เชฒเชชเซเชเชพเชฏเซเชฒเซ เชนเชคเซ, เชเซเชฅเซ เชฐเชพเชเชเชฐเชจเซ เชตเชฟเชจเชเชคเซเชจเซ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชจ เชเชฐเซ เชถเชเชพเชฏ เชเซ เชฐเชพเชเชเชฐ เชชเชนเซเชฒเชพเชฅเซ เช เชเชพเชฃเซ เชเซ เชคเซเชฎเชพเชเชฅเซ เชฌเซเชเชพ เชธเชฌเชจเซเชเชฎเชพเช เชคเชชเชพเชธ เชเชฐเชตเซ เชเชฐเซเชฐเซ เชนเซเชฏ. เชคเซ เชเชฒเซเชฒเซเชเชจเซเชฏ เชเซ เชเซ เชเซ เชฐเชพเชเชเชฐ เชชเชฐ เชนเซเช เชตเชฟเชจเชเชคเซ เชเชฐเซ เชฐเชนเซเชฏเซ เชเซเช เชคเซ เชซเชเซเชค OSPF เชฆเซเชตเชพเชฐเชพ เช เชฐเซเช เชเชพเชฃเซ เชเซ, เชคเซเชฅเซ เชเช เชฐเชพเชเชเชฐ เชฎเชพเชเซ เชธเซเชเซเชฐเชฟเชชเซเชเชจเซ เชเชพเชฒเชคเซ เชธเชฎเชฏ เชเชเชพเชกเชตเชพ เชตเชฟเชจเชเชคเซเชฎเชพเช เชฅเซเชกเซ เชซเซเชฐเชซเชพเชฐ เชเชฐเชตเซ เชตเชงเซ เชธเชพเชฐเซเช เชเซ.
data = dev.rpc.get_ospf_route_information()
เชนเชตเซ เชเชพเชฒเซ เชเซเชฏเชพเชฐเซ เชฒเซเชชเชจเซ เชธเชพเชฎเชเซเชฐเซ เชเซเชเช
เชถเชฐเซเชเชคเชฎเชพเช, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชฎเชพเชธเซเช เชธเชพเชฅเซ เชธเชฌเชจเซเช เชฆเชพเชเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชนเซเชตเชพเชฎเชพเช เชเชตเชถเซ เช เชจเซ เชธเชฎเชพเชจ เชธเชฌเชจเซเชเชจเชพ เชจเซเชเชตเชฐเซเชเชฎเชพเชเชฅเซ เชคเซเชฐเชฃ เชเชเซเชเซเชเซเชธเชฅเซ เชตเชงเซ เชจเชนเซเช, เชถเซเชง เชถเซเชฐเซเชฃเซ เชธเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เช เชเชฐเซเชฐเซ เชเซ. เชฎเชจเซ เชฎเชพเชชเชฆเชเชกเซ เช เชจเซ เชถเซเชง เชถเซเชฐเซเชฃเซเชจเซ เชเชฒเซเชฒเซเช เชเชฐเชตเชพเชจเซ เช เช เชฎเชฒ เชเชฐเซเชเชฐ เชเชฎเชคเซ เชจเชฅเซ, เชชเชฐเชเชคเซ เชนเชเซ เชธเซเชงเซ เชฎเชจเซ เชตเชงเซ เชธเชพเชฐเซ เชเชเซเชฒ เชฎเชณเซเชฏเซ เชจเชฅเซ. เชเชเชณ, เชธเชฌเชจเซเชเซเชธ เชฐเซเช_เชฒเชฟเชธเซเชเชจเซ เชชเชฐเชฟเชฃเชพเชฎเซ เชธเซเชเชฟเชฎเชพเชเชฅเซ, เชคเซเชฐเชฃ เชเชเซเชเซเชเซเชธ เชเชฐเชคเชพเช เชตเชงเซ เชจ เชนเซเชฏ เชคเซเชตเชพ เชเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชนเซเช เชฎเชจเซ เชฐเซเชเชฟ เชงเชฐเชพเชตเชคเชพ เชธเชฌเชจเซเชเซเชธ เชชเชธเชเชฆ เชเชฐเซเช เชเซเช.
tmp = re.search(r'^%sS*' % subnet_search, route_list[i])
IPNetwork, netaddr เชฎเซเชกเซเชฏเซเชฒ เชฆเซเชตเชพเชฐเชพ, เชนเซเช ipv4 เชธเชฐเชจเชพเชฎเชพเชเชเชจเซ เชธเซเชเชฟเชจเชพ เชฐเซเชชเชฎเชพเช เชธเชฌเชจเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเซเช เชเซเช.
range_subnet = netaddr.IPNetwork(tmp.group(0))
IPNetwork เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชนเซเช เชฎเชพเชธเซเช เชธเชพเชฅเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชฆเซเชตเชพเชฐเชพ เชฆเชพเชเชฒ เชเชฐเชพเชฏเซเชฒ เชจเซเชเชตเชฐเซเชเชฎเชพเชเชฅเซ เชธเชฐเชจเชพเชฎเชพเชเชเชจเซ เชถเซเชฐเซเชฃเซ เชฎเซเชณเชตเซเช เชเซเช เช เชจเซ เชเชฌเชเซ เชเชฐเซเชฒเชพ เชธเชฐเชจเชพเชฎเชพเชเชเชจเซ เชธเซเชเชฟ เชธเชพเชฅเซ เชธเชฐเชเชพเชฎเชฃเซ เชเชฐเชตเชพ เชฎเชพเชเซ เช เชถเซเชฐเซเชฃเซเชฎเชพเชเชฅเซ เชคเชฎเชพเชฎ เชธเชฐเชจเชพเชฎเชพเชเชเชจเซ เชธเซเชเชฟ เชเชจเชฐเซเช เชเชฐเซเช เชเซเช.
for i in set(net_list).difference(set(busyip)):
freeip.append(i)
เชนเซเช เชธเชฌเชจเซเชเซเชธเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชฎเชซเชค เชธเชฐเชจเชพเชฎเชพเชเชจเซ เชชเชฐเชฟเชฃเชพเชฎเซ เชธเซเชเชฟ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเซเช เชเซเช
print(netaddr.IPSet(freeip))
เชจเซเชเซ เชธเชเชชเซเชฐเซเชฃ เชธเซเชเซเชฐเชฟเชชเซเช เชเซ, เชฐเชพเชเชเชฐ เชคเชฐเซเชเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเซ เชธเซเชตเซเชเซ, เชฎเซเชกเซเชฒเซเชธ ex4550, ex4600 เชชเชฐ เชเชเชพเชธเชพเชฏเซเชฒ เชเซ
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import argparse
import getpass
import netaddr
import re
import sys
import jnpr.junos
parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user',
action='store',
dest='name',
help='Enter login from tacacs if it differs from the '
'username in the system.')
args = parser.parse_args()
if not args.name:
args.name = getpass.getuser() # Return the โlogin nameโ of the user.
router = input("Full routers name: ")
password = getpass.getpass("Password: ")
try:
# Authenticates to a device running Junos, for get information about routs
# into xml format and selects by tag.
route_list = []
with jnpr.junos.Device(host=router,
user=args.name,
passwd=password) as dev:
data = dev.rpc.get_route_information()
route_list = data.xpath("//rt-destination/text()")
except (jnpr.junos.exception.ConnectRefusedError,
jnpr.junos.exception.ConnectUnknownHostError) as err:
print("Equipment name or password wrong.")
sys.exit(1)
while True:
subnet = input("Net with mask: ")
subnet_search = input("Input no more three octet: ")
# Gets a list of busy IP addresses from the received subnets.
busyip = []
for i in range(len(route_list)):
tmp = re.search(r'^%sS*' % subnet_search, route_list[i])
if tmp:
range_subnet = netaddr.IPNetwork(tmp.group(0))
for ip in range_subnet:
busyip.append("%s" % ip)
range_subnet = netaddr.IPNetwork(subnet)
# Gets list ip adresses from subnetworks lists.
net_list = []
for ip in range_subnet:
net_list.append("%s" % ip)
# ะกomparing lists.
freeip = []
for i in set(net_list).difference(set(busyip)):
freeip.append(i)
print(netaddr.IPSet(freeip))
request = input("To run request again enter yes or y, "
"press 'enter', complete request: ")
if request in ("yes", "y"):
continue
else:
print('Bye')
break
เชธเซเชฐเซเชธ: www.habr.com