α’αααααα’αααΈααΆαααααΎααΆαααΆαα½α Junos PyEZ - "Python microframework αααα’αΆα α±ααα’αααααααααααα αα·αααααααααααααα·ααααα§ααααααααααααΎαααΆα Junos OS" ααααααααααααα·αααα αα·αααΆαααααααααα α’αααΈααααααααΆααααααΎαα αΌαα α·αααα ααΆααααααααααααΈααααααΆααα·αααααΆαα αααα»αα’ααααααααααΆαααααα ααΆα αααΎα - ααΆαααα Python αα·αααΆαααΆαααααααααααααα·αααααααααΆααααΆααααααΌαααααααΆα α¬ααΆαααααΆααααααΌαααΆαααααααα ααΎα§ααααααααααααΎαααΆα Junos OS α αααααΎαααααΆααα½ααααα αΌαααααΆααΆααααΆαααα Python + Junos PyEZ αααααααΌαααΆαααααΎα‘αΎααααααΆαααα§αααααααΆααααα»αααΆαα αΌααα αααα»αααΆααΆααααααααααα·ααΈ Python αα·αααΆαααΆααααα½αααααΆαααααΎααααΆαααααααΆααα Junos PyEZ ααααα·ααααααΌαα±ααααΆαα ααααααΉαα’αααααααΆααα Junos OS α
ααααααα
ααααααααααααααΆααα ipv4 α₯ααα·ααααααααααΆαααααα·αααα·αααααααα»αα αα»αα αααααααα·αα·α ααααααααααααΆαααααΊα₯ααα·αααααααΊα’ααααααΆαααααΆαα»α’αααΈααΆαα αααα»αααααΌααα ααΎαα»αααΆααααΎααα½ααΆααααααααααααααΎαααΆα 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α ααΆαααααΈαααα»ααααα ααααα α»αααααααααα»αααααΌαααΆαα ααα’α»ααααα αΆααα ααααααααααααααΈαα
junos-eznc
netaddr
ααααααΈαβααΆαβααααΆαααΎαβααβαααααβα’αααβααααΎβαα αα α»ααααααβαααα»αβαααααααα α’αααβα’αΆα βα αΌαβαααααβαααααβα’αααβααααΎβαααααβαααβααααΎβαα show_route.py -u getpass.getpass ααβααΆαααβαααααΆααβααΈ stdin ααΌα ααααβααΆαααβαααααΆααβααΉαβαα·αβαα βαααα αα αααα»αααααααααα ααΎααααΈααααΆαααα α§ααααα α’αααααΉαααααΌααααα αΌαααααααααΆαααΈα α¬α’αΆααααααΆα IP ααααααΆααααα αα αααααααΌαααΆααα½αα αα·ααααααααΆααα’αααααα αΆαααΆα ααααααΆααααΆαα’αα»ααααΆααα ααΎα§αααααααααΌαααΆαααα½αα
Junos PyEZ ααΆααααααΆαααααΆαααα α§ααααααααααααΎαααΆα Junos OS αααααααΎαα»αααΌα telnet α¬ netconf ααΆαααα ssh α α’ααααααα·ααΆααααΆα’αααΈαααααΎαα α»ααααααα
ααΎααααΈααααΆαααα α§ααααα ααΌαααααΎααααΆααα§ααααααααααΌαα»α jnpr.junos
with jnpr.junos.Device(host=router,
user=args.name,
passwd=password) as dev:
ααααΎααααΌαααΆαααααΎα‘αΎααααααΆαααααααααααΌααααααααΆαααα ααΆααααααααα ααΆααααααΆαα α ααΆαααΈαα·αα·ααΈααΈα ααααΆα α¬ααΆαα α ααΆαααΈαα·αα·ααΈααΈα ααααΆα ααΆααααααΆααααα½αααΆαα
data = dev.rpc.get_route_information()
ααΆααααααααΆααααααααααΆαα ααΎ Junos OS
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()
α₯α‘αΌααααααΌααααα‘ααααΎαααααΉαααΆααα while loop
αα αααα αΆααααααΎα α’αααααααΎααααΆααααΉαααααΌαααΆαααααΎα±αααααα αΌααααααΆααααααααΆααααΆαα αα·ααα·αααΎαααΈααΈ octets ααΈαααααΆααααααααΆαααααΌα ααααΆ αααααΊα αΆαααΆα αααΎααααΈααααααα½ααααααααα αααα»ααα·αααΆαα·αα αΌαα α·αααααΆαα’αα»ααααααααΆααααααΆαααααααααα·αα·α αααα αα·ααα½ααααααααααααα ααα»αααααα αΌαααααααααααα αααα»ααα·αααΆαααααΎααααααααααΆααααααΎαααΆααααααα αααααΆαααα ααΈαααααΈαααααααααααααΆααα route_list αααααααΎα’ααααααααΆααα·αααΎαααΈααΈ octets αααα»αααααΎαααΎααααααΆαααααααααα»αα αΆααα’αΆαααααα
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