Junos PyEZ แƒฃแƒคแƒแƒกแƒ ipv4 แƒฅแƒ•แƒ”แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒกแƒขแƒแƒขแƒ˜แƒ 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-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— netconf แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒš แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒ–แƒ”. Netconf แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒแƒžแƒแƒ แƒแƒขแƒฃแƒ แƒแƒกแƒ—แƒแƒœ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒ— RPC แƒ“แƒ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก XML, แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, แƒ›แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฌแƒแƒ“แƒ”แƒ‘แƒšแƒแƒ“.

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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ