เบเบปเบเบเบงเบฒเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ Junos PyEZ - "Python microframework เบเบตเปเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบฒเบเปเบฅเบฐเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบญเบธเบเบฐเบเบญเบเบเบตเปเปเบฅเปเบ Junos OS" เบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบฅเบฐเบเบฒเบเบเบธเปเบกเบเบญเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบฎเบฑเบ. เบเบฒเบเบเบฝเบเบชเบฐเบเบดเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบงเปเปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบกเบตเปเบเบปเปเบฒเบซเบกเบฒเบเบซเบผเบฒเบ - เบเบฒเบเบฎเบฝเบเบฎเบนเป Python เปเบฅเบฐเบงเบฝเบเบเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบฑเบเบเปเบฒเบเปเปเบกเบนเบเบซเบผเบทเบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบญเบธเบเบฐเบเบญเบเบเบตเปเปเบเป Junos OS. เบเบฒเบเปเบฅเบทเบญเบเบเบญเบเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบชเบฐเปเบเบฒเบฐเบเบญเบ Python + Junos PyEZ เปเบเปเบเบทเบเบชเปเบฒเบเบเบทเปเบเบเปเบญเบเบเบฒเบเบเบฑเบเบเบงเบฒเบเบเบฒเบเปเบเบปเปเบฒเบชเบนเปเบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบก Python เบเปเปเบฒเปเบฅเบฐเบเบงเบฒเบกเบเปเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบซเปเบญเบเบชเบฐเบซเบกเบธเบ Junos PyEZ, เปเบเบดเปเบเบเปเปเบเปเบญเบเบเบฒเบเบเบงเบฒเบกเบฎเบนเปเบเบญเบเบเบนเปเบเปเบฝเบงเบเบฒเบเบเบญเบ Junos OS.
เบเบธเบเบเบฐเบชเบปเบ
เบเบฒเบเบเบงเบเบชเบญเบเปเบเบทเบญเบเปเบฒเบเบเปเบญเบ ipv4 เบเบฃเบตเบเบญเบเบเปเบฅเบดเบชเบฑเบ. เปเบเบทเปเบญเบเปเบเบเบตเปเปเบเบทเบญเบเปเบฒเบเบเปเบญเบเปเบกเปเบเบเปเปเปเบชเบเบเปเบฒเปเบกเปเบเบเปเปเบกเบตเบเบฒเบเปเบเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบกเบฑเบเบขเบนเปเปเบเปเบชเบฑเปเบเบเบฒเบเบเปเบฒเบเปเปเบเบชเบฐเบงเบดเบเบเบตเปเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเปเบเบฑเบ router เบเบตเปเปเบเป Junos OS.
ะ ะตะฐะปะธะทะฐัะธั
Python + Junos PyEZ, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบกเบตเบเบฒเบเบฅเปเปเบฅเบงเบเบเบตเปเบเบฐเปเบฎเบฑเบเบกเบฑเบเบเปเบฒเบ paramiko เปเบฅเบฐ ssh.exec_command,
เบเบฒเบเบเบดเบเบเบฑเปเบ Junos PyEZ เบชเบฐเบเบฑเบเบเบฐเบเบธเบเบฑเบเบเบฒเบ PyPI เปเบกเปเบเปเบฎเบฑเบเบเปเบงเบเบเปเบฒเบชเบฑเปเบเบเปเปเปเบเบเบตเป:
$ pip install junos-eznc
เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเบเบดเบเบเบฑเปเบเบเบฒเบเบชเบฒเบเบฒเบเบปเปเบเบเปเบเบญเบเปเบเบเบเบฒเบเปเบ GitHub เบเปเบงเบเบเปเบฒเบชเบฑเปเบเบเปเปเปเบเบเบตเป:
$ pip install git+https://github.com/Juniper/py-junos-eznc.git
เปเบฅเบฐเบญเบตเบเบเบฒเบเปเบฅเบทเบญเบเบซเบเบถเปเบเปเบเบเบเปเบฒเบ
$ pip install -r requirements.txt
เบเปเบฒเบชเบฑเปเบเบเบตเปเบเบฐเบเบดเบเบเบฑเปเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบเบตเปเบเบฒเบเบซเบฒเบเปเบเบเบฒเบเบฅเบฐเบเบปเบเปเบฅเบฐเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบ. เปเบเบชเบฐเบเบฑเบเบเบญเบเบเปเบญเบ เบเบงเบฒเบกเบเปเบญเบเบเบฒเบ .txt เบกเบตเบเบฝเบเปเบเปเบชเบญเบเบเบญเบเบเบงเบเปเบเบปเบฒ, เบชเบฐเบเบฑเบเบซเบฅเปเบฒเบชเบธเบเปเบกเปเบเบเบตเปเปเบซเปเปเบซเบฑเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบฝเบ script:
junos-eznc
netaddr
เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, script เบเบฐเปเบญเบปเบฒเบเบทเปเบเบนเปเปเบเปเบเบฐเบเบธเบเบฑเบเบขเบนเปเปเบเบฅเบฐเบเบปเบ; เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบเบเบฒเบเปเบเปเบเบทเปเบเบญเบเบเบนเปเปเบเปเบญเบทเปเบเปเบเบเปเบเปเบฅเบฐเบซเบฑเบ show_route.py -u. getpass.getpass เปเบญเบปเบฒเบฅเบฐเบซเบฑเบเบเปเบฒเบเบเบฒเบ stdin เบเบฑเปเบเบเบฑเปเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเบเบฐเบเปเปเบขเบนเปเปเบเบฅเบฐเบเบปเบ. เปเบเบทเปเบญเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบญเบธเบเบฐเบเบญเบ, เบเปเบฒเบเบเบฑเบเบเบฐเบเปเบญเบเปเบชเปเบเบทเปเปเบเบปเปเบฒเบเบฒเบเบซเบผเบทเบเบตเปเบขเบนเป IP เบเบญเบเบกเบฑเบเปเบกเบทเปเบญเบเบทเบเปเบเบทเบญเบ. เบเปเปเบกเบนเบเบเบฑเบเปเบปเบเบเบตเปเบเบณเปเบเบฑเบเบชเบณเบฅเบฑเบเบเบฒเบเบญเบฐเบเบธเบเบฒเบเปเบเบญเบธเบเบฐเบเบญเบเปเบเปเบฎเบฑเบเปเบฅเปเบง.
Junos PyEZ เบฎเบญเบเบฎเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบญเบธเบเบฐเบเบญเบเบเบตเปเปเบฅเปเบ Junos OS เปเบเบเปเบเป console, telnet เบซเบผเบท netconf เบเปเบฒเบ ssh. เบเบปเบเบเบงเบฒเบกเบชเบปเบเบเบฐเบเบฒเบเบฒเบเปเบฅเบทเบญเบเบชเบธเบเบเปเบฒเบ.
เปเบเบทเปเบญเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบญเบธเบเบฐเบเบญเบ, เปเบซเปเปเบเปเบซเปเบญเบเบฎเบฝเบเบญเบธเบเบฐเบเบญเบเบเบญเบเปเบกเบเบนเบ jnpr.junos
with jnpr.junos.Device(host=router,
user=args.name,
passwd=password) as dev:
เบเบฒเบเบฎเปเบญเบเบเปเปเบกเปเบเปเบฎเบฑเบเบชเปเบฒเบฅเบฑเบเบเบธเบเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบฎเบนเปเบเบฑเบเบเบฑเบ router เปเบเบเบเปเบฒเบเบเบฒเบเปเบเบเบฑเปเบเบเบญเบเบเบฒเบเปเบเบซเบผเบทเบเบฒเบเปเบเบเบฑเปเบเบเบญเบเบเบฒเบเปเบ, เบญเบฑเบเปเบเบเบฐเบชเบฐเบเบงเบเบเบงเปเบฒ.
data = dev.rpc.get_route_information()
เบเปเบฒเบชเบฑเปเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเปเบ Junos OS
user@router> show route | display xml
เปเบเบเบเบฒเบเปเบเบตเปเบก rpc เปเบเบเบญเบเบเปเบฒเบเบเบญเบเบเปเบฒเบชเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเปเบเบฑเบเบเปเบฒเบฎเปเบญเบเบเปเปเบฅเบฐเบชเบฒเบกเบฒเบเบเบฑเบเบเบนเปเบเบฑเบเบเบทเปเบเบญเบเบงเบดเบเบตเบเบฒเบ RPC, เบเปเบงเบเบงเบดเบเบตเบเบตเปเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเบญเบเบซเบฒเบเบทเปเบญเบทเปเบเปเบเบตเปเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบ. เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบชเบฑเบเปเบเบเบงเปเบฒ syntax เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฝเบเปเบเบเบเปเบฒเบชเบฑเปเบเบเปเบฒเบฎเปเบญเบเบเปเปเบกเปเบเปเบเบเบเปเบฒเบเบเบฒเบเบเบทเปเบงเบดเบเบตเบเบฒเบ, เบเบท, เบเปเบฒเบเบเบงเบเบเปเบฝเบ hyphens เบเบฑเบ underscores.
user@router> show route | display xml rpc
<rpc-reply >route_list = data.xpath("//rt-destination/text()")
เบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเบเบญเบเบเบฒเบเบชเปเบงเบเปเบเปเบเบทเบเบซเปเปเบขเบนเปเปเบ loop เปเบเบเบฐเบเบฐเบเบตเป, เปเบเบทเปเบญเบเปเปเปเบซเปเปเบฎเบฑเบเบเปเปเบฒเบเบฒเบเบฎเปเบญเบเบเปเบเบฑเบ router เปเบเปเบเปเบฒเบซเบฒเบเบงเปเบฒเบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบงเบเบชเบญเบเปเบ subnet เบญเบทเปเบเบเบฒเบเบเบนเปเบเบตเป router เบฎเบนเปเปเบฅเปเบงเบเปเบฝเบงเบเบฑเบ. เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบญเบเบงเปเบฒ router เบเบตเปเบเปเบญเบเบเปเบฒเบฅเบฑเบเปเบฎเบฑเบเบเปเบฒเบฎเปเบญเบเบเปเบฎเบนเปเปเบชเบฑเปเบเบเบฒเบเบเบฝเบเปเบเปเบเปเบฒเบ OSPF, เบเบฑเปเบเบเบฑเปเบเบชเปเบฒเบฅเบฑเบ router edge เบกเบฑเบเบเบตเบเบงเปเบฒเบเบตเปเบเบฐเบเปเบฝเบเบเปเบฒเบฎเปเบญเบเบเปเปเบฅเบฑเบเบเปเบญเบเปเบเบทเปเบญเบซเบผเบธเบเบเปเบญเบเปเบงเบฅเบฒเปเบฅเปเบเบเบญเบ script.
data = dev.rpc.get_ospf_route_information()
เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเปเบเบทเปเบญเปเบเบเบญเบ while loop
เปเบเบเบญเบเปเบฅเบตเปเบกเบเบปเปเบ, เบเบนเปเปเบเปเบเบฐเบเบทเบเบฎเปเบญเบเบเปเปเบซเปเปเบเบปเปเบฒเปเบเปเบ subnet เบเบตเปเบกเบตเบซเบเปเบฒเบเบฒเบเปเบฅเบฐเบเปเปเบกเบตเบซเบผเบฒเบเบเปเบงเบฒเบชเบฒเบก octets เบเบฒเบเปเบเบทเบญเบเปเบฒเบเบเบญเบ subnet เบเบฝเบงเบเบฑเบ, เบเบตเปเปเบเบฑเบเบชเบดเปเบเบเปเบฒเปเบเบฑเบเปเบเบทเปเบญเบเปเบฒเบเบปเบเบเบญเบเปเบเบเบเบฒเบเบเบญเบเบซเบฒ. เบเปเบญเบเบเปเปเบกเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบฒเบเบปเบเปเบเบทเปเบญเบเปเบเปเบฅเบฐเปเบฅเบเบฐเบเบฒเบเบเบปเปเบเบซเบฒเบเบตเป, เปเบเปเบกเบฒเบฎเบญเบเบเบฐเบเบธเบเบฑเบเบเปเบญเบเบเปเปเบเบปเบเบงเบดเบเบตเปเบเปเปเบเบเบตเปเบเบตเบเบงเปเบฒ. เบเปเปเปเบ, เบเบฒเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบปเบเปเบเปเบฎเบฑเบเบเบญเบ subnets route_list, เปเบเบเปเบเปเบเบปเบงเปเบเบเบตเปเบเปเปเบกเบตเบซเบผเบฒเบเบเปเบงเบฒเบชเบฒเบก octets, เบเปเบญเบเปเบฅเบทเบญเบ subnets เบเบตเปเบเปเบญเบเบชเบปเบเปเบ.
tmp = re.search(r'^%sS*' % subnet_search, route_list[i])
เบเปเบฒเบ IPNetwork, เปเบกเบเบนเบ netaddr, เบเปเบญเบเปเบเปเบฎเบฑเบ subnets เปเบเบฎเบนเบเปเบเบเบเบญเบเบฅเบฒเบเบเบทเปเบเบตเปเบขเบนเป 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))
เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบกเปเบเบชเบฐเบเบดเบเบเบตเปเบชเบปเบกเบเบนเบ, เบเบปเบเบชเบญเบเปเบเบชเบฐเบงเบดเบเบเบตเปเปเบเปเปเบเบฑเบ router, เปเบเบ 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