Junos PyEZ-āĻāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻžāϰ āĻŦāĻŋāώāϝāĻŧā§ āĻāĻāĻāĻŋ āύāĻŋāĻŦāύā§āϧ - "āĻĒāĻžāĻāĻĨāύ āĻŽāĻžāĻāĻā§āϰā§āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻ āϝāĻž āĻāĻĒāύāĻžāĻā§ āĻā§āύā§āϏ āĻāĻāϏ āĻāĻžāϞāĻŋāϤ āĻĄāĻŋāĻāĻžāĻāϏāĻā§āϞāĻŋ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāĻŦāĻ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻāϰāϤ⧠āϏāĻā§āώāĻŽ āĻāϰā§" āĻ āĻā§āĻŽā§āĻļāύ āĻāĻŦāĻ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž, āϝāĻž āĻāĻŽāϰāĻž āĻĒāĻāύā§āĻĻ āĻāϰāĻŋāĨ¤ āĻāĻ āύāĻŋāĻŦāύā§āϧ⧠āĻŦāϰā§āĻŖāĻŋāϤ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϞā§āĻāĻžāϰ āĻŦā§āĻļ āĻāϝāĻŧā§āĻāĻāĻŋ āϞāĻā§āώā§āϝ āĻāĻŋāϞ - āĻĒāĻžāĻāĻĨāύ āĻļā§āĻāĻž āĻāĻŦāĻ āĻā§āύā§āϏ āĻāĻāϏ āĻāĻžāϞāĻŋāϤ āϏāϰāĻā§āĻāĻžāĻŽāĻā§āϞāĻŋāϤ⧠āϤāĻĨā§āϝ āϏāĻāĻā§āϰāĻš āĻŦāĻž āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻžāĻāĻā§āϞāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻžāĨ¤ āĻĒāĻžāĻāĻĨāύ + āĻā§āύā§āϏ āĻĒāĻžāĻāĻāĻā§āĻĄā§āϰ āĻāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻāĻŽāĻŋāĻļā§āϰāĻŖā§āϰ āĻĒāĻāύā§āĻĻāĻāĻŋ āĻĒāĻžāĻāĻĨāύ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ āĻāĻžāώāĻžāϝāĻŧ āĻĒā§āϰāĻŦā§āĻļā§āϰ āĻāĻŽ āĻŦāĻžāϧāĻž āĻāĻŦāĻ āĻā§āύā§āϏ āĻĒāĻžāĻāĻāĻā§āĻĄ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āϏāĻšāĻāϤāĻžāϰ āĻāĻžāϰāĻŖā§ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ, āϝāĻžāϰ āĻāύā§āϝ āĻā§āύā§āϏ āĻāĻāϏā§āϰ āĻŦāĻŋāĻļā§āώāĻā§āĻ āĻā§āĻāĻžāύā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤
āĻāĻžāĻā§āϰ
āĻā§āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻ āύā§āϤāϰā§āĻāϤ āĻŦāĻŋāύāĻžāĻŽā§āϞā§āϝ⧠ipv4 āϏāĻžāĻŦāύā§āĻā§āϰ āύāĻŋāϰā§āĻā§āώāĻžāĨ¤ āĻāĻāĻāĻŋ āϏāĻžāĻŦāύā§āĻ āĻŦāĻŋāύāĻžāĻŽā§āϞā§āϝā§āϰ āĻŽāĻžāύāĻĻāĻŖā§āĻĄ āĻšāϞ āĻā§āύā§āϏ āĻāĻāϏ āĻāĻžāϞāĻŋāϤ āϰāĻžāĻāĻāĻžāϰ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻžāĻ āĻāϰ⧠āϏā§āĻāĻā§āϰ āϰā§āĻā§ āĻāĻāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻāĻāĻŋ āĻāύā§āĻā§āϰāĻŋāϰ āĻ āύā§āĻĒāϏā§āĻĨāĻŋāϤāĻŋāĨ¤
āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύ
Python + Junos PyEZ, āϝāĻĻāĻŋāĻ paramiko āĻāĻŦāĻ ssh.exec_command āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻāĻŋ āĻāϰāĻžāϰ āĻĒā§āϰāϞā§āĻāύ āĻāĻŋāϞ, āĻĢāϞāϏā§āĻŦāϰā§āĻĒ, āĻĒā§āϞ āĻāϰāĻž āϏāϰāĻā§āĻāĻžāĻŽāĻā§āϞāĻŋāϤ⧠āĻāĻĒāύāĻžāĻā§ netconf āĻĄāĻŋāĻāĻžāĻāϏ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻĒā§āϰā§āĻā§āĻāϞ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ Netconf āĻĻā§āϰāĻŦāϰā§āϤ⧠āĻĒāĻĻā§āϧāϤāĻŋ āĻāϞ RPC āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻšāĻžāϰā§āĻĄāĻāϝāĻŧā§āϝāĻžāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰ⧠āĻāĻŦāĻ XML āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻāĻ āĻāĻĻāĻžāĻšāϰāĻŖā§, āĻāĻāĻŋ āĻĒā§āϰāĻžāĻĒā§āϤ āϤāĻĨā§āϝ āĻĒā§āϰāĻĻāĻžāύ āĻāϰāϤā§āĨ¤
PyPI āĻĨā§āĻā§ Junos PyEZ āĻāϰ āĻŦāϰā§āϤāĻŽāĻžāύ āϏāĻāϏā§āĻāϰāĻŖ āĻāύāϏā§āĻāϞ āĻāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻŽāĻžāύā§āĻĄ āĻĻāĻŋāϝāĻŧā§ āϏāĻŽā§āĻĒāύā§āύ āĻāϰāĻž āĻšāϝāĻŧ:
$ pip install junos-ezncāĻāĻĒāύāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻŽāĻžāύā§āĻĄā§āϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻāĻŋāĻāĻšāĻžāĻŦā§āϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻĒā§āϰāϧāĻžāύ āĻļāĻžāĻāĻž āĻĨā§āĻā§āĻ āĻāύāϏā§āĻāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
$ 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 āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāύāϏā§āϞ, āĻā§āϞāύā§āĻ āĻŦāĻž āύā§āĻāĻāύāĻĢ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻā§āύā§āϏ āĻāĻāϏ āĻāĻžāϞāĻžāύā§āϰ āϏāϰāĻā§āĻāĻžāĻŽāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻ āϏāĻŽāϰā§āĻĨāύ āĻāϰā§āĨ¤ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āĻĒāϰāĻŦāϰā§āϤ⧠āĻŦāĻŋāĻāϞā§āĻĒ āύāĻŋāϝāĻŧā§ āĻāϞā§āĻāύāĻž āĻāϰā§āĨ¤
āϏāϰāĻā§āĻāĻžāĻŽā§āϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻ āĻāϰāϤā§, 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()")āĻŦāĻžāĻāĻŋ āĻ āĻāĻļāĻāĻŋ āĻāĻŋāĻā§āĻā§āώāĻŖ āϞā§āĻĒā§ āĻŽā§āĻĄāĻŧāĻžāύ⧠āĻāĻŋāϞ, āϝāĻžāϤ⧠āϰāĻžāĻāĻāĻžāϰā§āϰ āĻāĻžāĻā§ āĻ āύā§āϰā§āϧāĻāĻŋ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āύāĻž āĻšāϝāĻŧ āϝāĻĻāĻŋ āϰāĻžāĻāĻāĻžāϰ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āĻāĻžāύ⧠āĻāĻŽāύ āĻ āύā§āϝ āϏāĻžāĻŦāύā§āĻ āĻĨā§āĻā§ āĻā§āĻ āĻāϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧāĨ¤ āĻāĻāĻž āĻāϞā§āϞā§āĻ āĻāϰāĻžāϰ āĻŽāϤ⧠āϝ⧠āĻāĻŽāĻŋ āϝ⧠āϰāĻžāĻāĻāĻžāϰāĻāĻŋāϤ⧠āĻ āύā§āϰā§āϧ āĻāϰāĻāĻŋ āϏ⧠āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāϏāĻĒāĻŋāĻāĻĢ-āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϰā§āĻ āĻāĻžāύā§, āϤāĻžāĻ āĻāĻ āϰāĻžāĻāĻāĻžāϰā§āϰ āĻāύā§āϝ āϏā§āĻā§āϰāĻŋāĻĒā§āĻā§āϰ āĻāϞāĻŽāĻžāύ āϏāĻŽāϝāĻŧ āĻāĻŽāĻžāϤ⧠āĻ āύā§āϰā§āϧāĻāĻŋ āĻāĻāĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āĻāĻžāϞāĨ¤
data = dev.rpc.get_ospf_route_information()āĻāĻāύ āĻĻā§āĻāĻž āϝāĻžāĻ while āϞā§āĻĒā§āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤā§
āĻļā§āϰā§āϤā§, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻāĻāĻāĻŋ āĻŽā§āĻā§āĻļ āϏāĻš āĻāĻāĻāĻŋ āϏāĻžāĻŦāύā§āĻ āĻĒā§āϰāĻŦā§āĻļ āĻāϰāϤ⧠āĻŦāϞāĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻāĻ āϏāĻžāĻŦāύā§āĻā§āϰ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĨā§āĻā§ āϤāĻŋāύāĻāĻŋ āĻ āĻā§āĻā§āĻā§āϰ āĻŦā§āĻļāĻŋ āύāϝāĻŧ, āĻ āύā§āϏāύā§āϧāĻžāύ āĻĒāϰāĻŋāϏāϰ āϏā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāĨ¤ āĻāĻŽāĻŋ āĻŽāĻžāύāĻĻāĻŖā§āĻĄ āĻāĻŦāĻ āĻ āύā§āϏāύā§āϧāĻžāύ āĻĒāϰāĻŋāϏā§āĻŽāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāĻžāϰ āĻāĻ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύāĻāĻŋ āϏāϤā§āϝāĻŋāĻ āĻĒāĻāύā§āĻĻ āĻāϰāĻŋ āύāĻž, āϤāĻŦā§ āĻāĻāύāĻ āĻĒāϰā§āϝāύā§āϤ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻāĻžāϞ āϏāĻŽāĻžāϧāĻžāύ āĻā§āĻāĻā§ āĻĒāĻžāĻāύāĻŋāĨ¤ āĻāϰāĻĒāϰā§, āϏāĻžāĻŦāύā§āĻ āϰā§āĻ_āϞāĻŋāϏā§āĻā§āϰ āĻĢāϞāĻžāĻĢāϞā§āϰ āϤāĻžāϞāĻŋāĻāĻž āĻĨā§āĻā§, āϤāĻŋāύāĻāĻŋ āĻ āĻā§āĻā§āĻā§āϰ āĻŦā§āĻļāĻŋ āύāϝāĻŧ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻāĻŽāĻŋ āĻāĻŽāĻžāϰ āĻāĻā§āϰāĻšā§āϰ āϏāĻžāĻŦāύā§āĻ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰāĻŋ
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
