แกแขแแขแแ Junos PyEZ-แแแ แแฃแจแแแแแก แจแแกแแฎแแ - โPython microframework, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแ แแแ แแ แแแขแแแแขแแแแ แแ แแแฌแงแแแแแแแแแ, แ แแแแแแแช แแฃแจแแแแแ Junos OS-แแก แแแขแแแแขแแแแชแแแกแ แแ แแแ แแแแจแ, แงแแแแแคแแ แ แ แแช แฉแแแ แแแแงแแแ แก. แแ แกแขแแขแแแจแ แแฆแฌแแ แแแ แกแแ แแแขแแก แแแฌแแ แแก แ แแแแแแแแ แแแแแแ แฐแฅแแแแ - แแแแแแแก แกแฌแแแแ แแ แแแแชแแแแแแก แแแขแแแแขแแแแชแแ แแแคแแ แแแชแแแก แจแแแ แแแแแแกแแแแก แแ แแแแคแแแฃแ แแชแแแก แจแแชแแแ แแแฌแงแแแแแแแแแ, แ แแแแแแช แแฃแจแแแแก 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 แแแแฃแแแก Device แแแแกแ
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-แแก แกแแจแฃแแแแแแ, แแกแ แ แแ, edge แ แแฃแขแแ แแกแแแแก แกแฏแแแก แชแแขแ แจแแชแแแแแ แแแแฎแแแแ แกแแ แแแขแแก แแฃแจแแแแแก แแ แแแก แจแแกแแแชแแ แแแแแ.
data = dev.rpc.get_ospf_route_information()
แแฎแแ แแแแแ แจแแแฎแแแแ while แแแ แงแฃแแแก แจแแแแแ แกแก
แแแกแแฌแงแแกแจแ, แแแแฎแแแ แแแแแก แแแแแฎแแแแแ แจแแแงแแแแแก แฅแแแฅแกแแแ แแแฆแแแ แแ แแ แแฃแแแขแแก แกแแแ แแฅแขแแขแแกแ แแแแแ แฅแแแฅแกแแแแก แฅแกแแแแแแ, แแก แแฃแชแแแแแแแแ แกแแซแแแแ แแแแแแแแแแก แแแกแแงแแแแแแแ. แแ แแแแแแแแแ แแ แแแแฌแแแก แแ แแขแแ แแฃแแแแแก แแ แซแแแแแก แแแแแแแแแแก แแแแฃแกแขแแแแก แแก แแแแฎแแ แชแแแแแแ, แแแแ แแ แฏแแ แฏแแ แแแแ แฃแแแแแกแ แแแแแกแแแแแ แแแ แแแแแแ. แจแแแแแแ, แฅแแแฅแกแแแแแแก route_list-แแก แจแแแแแแ แแแฆแแแฃแแ แกแแแแแ, แชแแแแแแก แแแแแงแแแแแแ, แ แแแแแแช แจแแแชแแแก แแ แแฃแแแขแแก แกแแแ แแฅแขแแขแแก, แแแ แฉแแ แฅแแแฅแกแแแแแก, แ แแแแแแแช แแแแแขแแ แแกแแแก.
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