Junos PyEZ เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบ ipv4 เบŸเบฃเบต

เบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Junos PyEZ - "Python microframework เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เปเบฅเบฐเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปเบฅเปˆเบ™ Junos OS" เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบฑเบ. เบเบฒเบ™เบ‚เบฝเบ™เบชเบฐเบ„เบดเบšเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบกเบตเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบซเบผเบฒเบ - เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰ Python เปเบฅเบฐเบงเบฝเบเบ‡เบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบซเบผเบทเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปƒเบŠเป‰ Junos OS. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ Python + Junos PyEZ เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบเป‰เบญเบ™เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Python เบ•เปˆเปเบฒเปเบฅเบฐเบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Junos PyEZ, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบฎเบนเป‰เบ‚เบญเบ‡เบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เบ‚เบญเบ‡ Junos OS.

เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡

เบเบฒเบ™เบเบงเบ”เบชเบญเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบ ipv4 เบŸเบฃเบตเบ‚เบญเบ‡เบšเปเบฅเบดเบชเบฑเบ”. เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบเปเบกเปˆเบ™เบšเปเปˆเป€เบชเบเบ„เปˆเบฒเปเบกเปˆเบ™เบšเปเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ•เปˆเบฒเบ‡เป†เปƒเบ™เบชเบฐเบงเบดเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™ router เบ—เบตเปˆเปƒเบŠเป‰ 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 เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบชเบฐเบšเบฑเบšเบซเบฅเป‰เบฒเบชเบธเบ”เปเบกเปˆเบ™เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ‚เบฝเบ™ script:

junos-eznc
netaddr

เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, script เบˆเบฐเป€เบญเบปเบฒเบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰เบ›เบฐเบˆเบธเบšเบฑเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบš; เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบžเบฒเบเปƒเบ•เป‰เบŠเบทเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบญเบทเปˆเบ™เป‚เบ”เบเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ” show_route.py -u. getpass.getpass เป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบˆเบฒเบ stdin เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบˆเบฐเบšเปเปˆเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบš. เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบˆเบฐเบ•เป‰เบญเบ‡เปƒเบชเปˆเบŠเบทเปˆเป€เบˆเบปเป‰เบฒเบžเบฒเบšเบซเบผเบทเบ—เบตเปˆเบขเบนเปˆ IP เบ‚เบญเบ‡เบกเบฑเบ™เป€เบกเบทเปˆเบญเบ–เบทเบเป€เบ•เบทเบญเบ™. เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบˆเบณเป€เบ›เบฑเบ™เบชเบณเบฅเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบฅเป‰เบง.

Junos PyEZ เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปเบฅเปˆเบ™ Junos OS เป‚เบ”เบเปƒเบŠเป‰ console, telnet เบซเบผเบท netconf เบœเปˆเบฒเบ™ ssh. เบšเบปเบ”เบ„เบงเบฒเบกเบชเบปเบ™เบ—เบฐเบ™เบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเบธเบ”เบ—เป‰เบฒเบ.

เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™, เปƒเบซเป‰เปƒเบŠเป‰เบซเป‰เบญเบ‡เบฎเบฝเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™ jnpr.junos

with jnpr.junos.Device(host=router,
                           user=args.name,
                           passwd=password) as dev:

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™เป€เบฎเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบเบฑเบš router เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ—เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบฒเบ‡เป„เบเบซเบผเบทเบเบฒเบ™เป‚เบ—เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบฒเบ‡เป„เบ, เบญเบฑเบ™เปƒเบ”เบˆเบฐเบชเบฐเบ”เบงเบเบเบงเปˆเบฒ.

data = dev.rpc.get_route_information()

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เปƒเบ™ Junos OS

user@router> show route | display xml

เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบก rpc เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเปเบ—เบฑเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปเบฅเบฐเบชเบฒเบกเบฒเบ”เบˆเบฑเบšเบ„เบนเปˆเบเบฑเบšเบŠเบทเปˆเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™ RPC, เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบŠเบทเปˆเบญเบทเปˆเบ™เป†เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆ. เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ syntax เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ„เบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบŠเบทเปˆเบงเบดเบ—เบตเบเบฒเบ™, เบ„เบท, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบ›เปˆเบฝเบ™ hyphens เบเบฑเบš underscores.

user@router> show route | display xml rpc
<rpc-reply >route_list = data.xpath("//rt-destination/text()")

เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เป„เบ”เป‰เบ–เบทเบเบซเปเปˆเบขเบนเปˆเปƒเบ™ loop เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฑเบš router เป„เบ”เป‰เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบเบงเบ”เบชเบญเบšเปƒเบ™ subnet เบญเบทเปˆเบ™เบˆเบฒเบเบœเบนเป‰เบ—เบตเปˆ router เบฎเบนเป‰เปเบฅเป‰เบงเบเปˆเบฝเบงเบเบฑเบš. เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบšเบญเบเบงเปˆเบฒ router เบ—เบตเปˆเบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบฎเบนเป‰เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเบœเปˆเบฒเบ™ OSPF, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบš router edge เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบฅเบฑเบเบ™เป‰เบญเบเป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™เบ‚เบญเบ‡ script.

data = dev.rpc.get_ospf_route_information()

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡ while loop

เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบœเบนเป‰เปƒเบŠเป‰เบˆเบฐเบ–เบทเบเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ subnet เบ—เบตเปˆเบกเบตเบซเบ™เป‰เบฒเบเบฒเบเปเบฅเบฐเบšเปเปˆเบกเบตเบซเบผเบฒเบเบเปˆเบงเบฒเบชเบฒเบก octets เบˆเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡ subnet เบ”เบฝเบงเบเบฑเบ™, เบ™เบตเป‰เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบเบฒเบ™เบŠเบญเบเบซเบฒ. เบ‚เป‰เบญเบเบšเปเปˆเบกเบฑเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปเบฅเบฐเป„เบฅเบเบฐเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ™เบตเป‰, เปเบ•เปˆเบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เป‰เบญเบเบšเปเปˆเบžเบปเบšเบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ. เบ•เปเปˆเป„เบ›, เบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡ subnets route_list, เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบตเปˆเบšเปเปˆเบกเบตเบซเบผเบฒเบเบเปˆเบงเบฒเบชเบฒเบก octets, เบ‚เป‰เบญเบเป€เบฅเบทเบญเบ subnets เบ—เบตเปˆเบ‚เป‰เบญเบเบชเบปเบ™เปƒเบˆ.

tmp = re.search(r'^%sS*' % subnet_search, route_list[i])

เบœเปˆเบฒเบ™ IPNetwork, เป‚เบกเบ”เบนเบ™ netaddr, เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฑเบš subnets เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบขเบนเปˆ 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))

เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบ„เบดเบšเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™, เบ—เบปเบ”เบชเบญเบšเปƒเบ™เบชเบฐเบงเบดเบ”เบ—เบตเปˆเปƒเบŠเป‰เป€เบ›เบฑเบ™ router, เปเบšเบš 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™