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

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster