Junos PyEZ-āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ - "āĻĒāĻžāĻāĻĨāĻ¨ āĻŽāĻžāĻāĻā§āĻ°ā§āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻā§āĻ¨ā§āĻ¸ āĻāĻāĻ¸ āĻāĻžāĻ˛āĻŋāĻ¤ āĻĄāĻŋāĻāĻžāĻāĻ¸āĻā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻŦāĻ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°ā§" āĻ āĻā§āĻŽā§āĻļāĻ¨ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž, āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻĒāĻāĻ¨ā§āĻĻ āĻāĻ°āĻŋāĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛ā§āĻāĻžāĻ° āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻŋāĻ˛ - āĻĒāĻžāĻāĻĨāĻ¨ āĻļā§āĻāĻž āĻāĻŦāĻ āĻā§āĻ¨ā§āĻ¸ āĻāĻāĻ¸ āĻāĻžāĻ˛āĻŋāĻ¤ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻāĻā§āĻ°āĻš āĻŦāĻž āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻžāĨ¤ āĻĒāĻžāĻāĻĨāĻ¨ + āĻā§āĻ¨ā§āĻ¸ āĻĒāĻžāĻāĻāĻā§āĻĄā§āĻ° āĻāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻāĻŽāĻŋāĻļā§āĻ°āĻŖā§āĻ° āĻĒāĻāĻ¨ā§āĻĻāĻāĻŋ āĻĒāĻžāĻāĻĨāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻŦā§āĻļā§āĻ° āĻāĻŽ āĻŦāĻžāĻ§āĻž āĻāĻŦāĻ āĻā§āĻ¨ā§āĻ¸ āĻĒāĻžāĻāĻāĻā§āĻĄ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻ¸āĻšāĻāĻ¤āĻžāĻ° āĻāĻžāĻ°āĻŖā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨ā§āĻ¸ āĻāĻāĻ¸ā§āĻ° āĻŦāĻŋāĻļā§āĻˇāĻā§āĻ āĻā§āĻāĻžāĻ¨ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻāĨ¤
āĻāĻžāĻā§āĻ°
āĻā§āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ° āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻāĻ¤ āĻŦāĻŋāĻ¨āĻžāĻŽā§āĻ˛ā§āĻ¯ā§ ipv4 āĻ¸āĻžāĻŦāĻ¨ā§āĻā§āĻ° āĻ¨āĻŋāĻ°ā§āĻā§āĻˇāĻžāĨ¤ āĻāĻāĻāĻŋ āĻ¸āĻžāĻŦāĻ¨ā§āĻ āĻŦāĻŋāĻ¨āĻžāĻŽā§āĻ˛ā§āĻ¯ā§āĻ° āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄ āĻšāĻ˛ āĻā§āĻ¨ā§āĻ¸ āĻāĻāĻ¸ āĻāĻžāĻ˛āĻŋāĻ¤ āĻ°āĻžāĻāĻāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¸ā§āĻāĻā§āĻ° āĻ°ā§āĻā§ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻā§āĻ°āĻŋāĻ° āĻ āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĨ¤
āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨
Python + Junos PyEZ, āĻ¯āĻĻāĻŋāĻ paramiko āĻāĻŦāĻ ssh.exec_command āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ˛ā§āĻāĻ¨ āĻāĻŋāĻ˛,
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