Π‘ΡΠ°ΡΠΈΡ Π·Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Junos PyEZ - βΠΠΈΠΊΡΠΎΡΠ°ΠΌΠΊΠ° Π½Π° Python, ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Ρ Junos OSβ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ±ΠΈΡΠ°ΠΌΠ΅. ΠΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°, ΠΎΠΏΠΈΡΠ°Π½ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π»ΠΈ - ΠΈΠ·ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Python ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π΄Π°ΡΠΈ Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅, ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ Ρ Junos OS. ΠΠ·Π±ΠΎΡΡΡ Π½Π° ΡΠ°Π·ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡ Python + Junos PyEZ Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ ΠΏΠΎΡΠ°Π΄ΠΈ Π½ΠΈΡΠΊΠ°ΡΠ° Π±Π°ΡΠΈΠ΅ΡΠ° Π·Π° Π½Π°Π²Π»ΠΈΠ·Π°Π½Π΅ Π² Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Python ΠΈ Π»Π΅ΠΊΠΎΡΠ°ΡΠ° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Junos PyEZ, ΠΊΠΎΡΡΠΎ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π΅ΠΊΡΠΏΠ΅ΡΡΠ½ΠΈ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ Π·Π° Junos OS.
ΠΠ°Π΄Π°ΡΠ°
ΠΠ΄ΠΈΡ Π½Π° Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΈ ipv4 ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°. ΠΡΠΈΡΠ΅ΡΠΈΡΡ, ΡΠ΅ ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π°, Π΅ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° Π·Π°ΠΏΠΈΡ Π·Π° Π½Π΅Ρ Π² ΠΌΠ°ΡΡΡΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΡΡΠ°ΡΠΎΡΠ°, Π΄Π΅ΠΉΡΡΠ²Π°Ρ ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Ρ, ΡΠ°Π±ΠΎΡΠ΅Ρ Ρ Junos OS.
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅
Python + Junos PyEZ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ·ΠΊΡΡΠ΅Π½ΠΈΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΡΠ΅Π· paramiko ΠΈ ssh.exec_command,
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° 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. Π‘ΡΠ°ΡΠΈΡΡΠ° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π°ΡΠΈΠ°Π½Ρ.
ΠΠ° Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Ρ ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΊΠ»Π°ΡΠ° Device Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° jnpr.junos
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()")
ΠΡΡΠ°Π½Π°Π»Π°ΡΠ° ΡΠ°ΡΡ Π±Π΅ΡΠ΅ ΠΎΠ±Π²ΠΈΡΠ° Π² ΡΠΈΠΊΡΠ» while, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΊΡΠΌ ΡΡΡΠ΅ΡΠ°, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈ Π΄ΡΡΠ³Π° ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠ° ΠΎΡ ΡΠ΅Π·ΠΈ, Π·Π° ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ΅ΡΡΡ Π²Π΅ΡΠ΅ Π·Π½Π°Π΅. Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π΅, ΡΠ΅ ΡΡΡΠ΅ΡΡΡ, Π½Π° ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ°Π²Ρ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΏΠΎΠ·Π½Π°Π²Π° ΠΌΠ°ΡΡΡΡΡΠΈ ΡΠ°ΠΌΠΎ ΠΏΡΠ΅Π· OSPF, ΡΠ°ΠΊΠ° ΡΠ΅ Π·Π° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ΅Π½ ΡΡΡΠ΅Ρ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°
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