Junos PyEZ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡ ipv4 āĻ¸āĻžāĻŦāĻ¨ā§‡āĻŸ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§‡āĻ° āĻ•āĻžāĻœā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡

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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨