Junos PyEZ แžŠแŸ„แž™แž”แŸ’แžšแžพแžงแž‘แžถแž แžšแžŽแŸแž“แŸƒแž—แžถแžšแž€แžทแž…แŸ’แž…แžŸแŸ’แžœแŸ‚แž„แžšแž€แž”แžŽแŸ’แžแžถแž‰แžšแž„ ipv4 แžฅแžแž‚แžทแžแžแŸ’แž›แŸƒ

แžขแžแŸ’แžแž”แž‘แžขแŸ†แž–แžธแž€แžถแžšแž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™ Junos PyEZ - "Python microframework แžŠแŸ‚แž›แžขแžถแž…แžฑแŸ’แž™แžขแŸ’แž“แž€แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„ แž“แžทแž„แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแž€แž˜แŸ’แž˜แžงแž”แž€แžšแžŽแŸแžŠแŸ‚แž›แžŠแŸ†แžŽแžพแžšแž€แžถแžš Junos OS" แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแž€แž˜แŸ’แž˜ แž“แžทแž„แž€แžถแžšแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„ แžขแŸ’แžœแžธแž‚แŸ’แžšแž”แŸ‹แž™แŸ‰แžถแž„แžŠแŸ‚แž›แž™แžพแž„แž…แžผแž›แž…แžทแžแŸ’แžแŸ” แž€แžถแžšแžŸแžšแžŸแŸแžšแžŸแŸ’แž‚แŸ’แžšแžธแž”แžŠแŸ‚แž›แž”แžถแž“แž–แžทแž–แžŽแŸŒแž“แžถแž“แŸ…แž€แŸ’แž“แžปแž„แžขแžแŸ’แžแž”แž‘แž“แŸแŸ‡แž˜แžถแž“แž‚แŸ„แž›แžŠแŸ…แž‡แžถแž…แŸ’แžšแžพแž“ - แž€แžถแžšแžšแŸ€แž“ Python แž“แžทแž„แž€แžถแžšแž„แžถแžšแžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแž€แž˜แŸ’แž˜แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž”แŸ’แžšแž˜แžผแž›แž–แŸแžแŸŒแž˜แžถแž“ แžฌแž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž“แŸ…แž›แžพแžงแž”แž€แžšแžŽแŸแžŠแŸ‚แž›แžŠแŸ†แžŽแžพแžšแž€แžถแžš 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

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 แžŠแžผแž…แŸ’แž“แŸแŸ‡แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžšแŸ‰แŸ„แžแž‘แŸแžšแž‚แŸ‚แž˜แžœแžถแž‡แžถแž€แžถแžšแž”แŸ’แžšแžŸแžพแžšแž€แŸ’แž“แžปแž„แž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแžŸแŸ†แžŽแžพแž”แž“แŸ’แžแžทแž…แž”แž“แŸ’แžแžฝแž…แžŠแžพแž˜แŸ’แž”แžธแž€แžถแžแŸ‹แž”แž“แŸ’แžแž™แž–แŸแž›แžœแŸแž›แžถแžŠแŸ†แžŽแžพแžšแž€แžถแžšแžšแž”แžŸแŸ‹แžŸแŸ’แž‚แŸ’แžšแžธแž”

data = dev.rpc.get_ospf_route_information()

แžฅแžกแžผแžœแž“แŸแŸ‡แžŸแžผแž˜แž€แŸ’แžšแžกแŸแž€แž˜แžพแž›แžแŸ’แž›แžนแž˜แžŸแžถแžšแž“แŸƒ while loop

แž“แŸ…แž–แŸแž›แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜ แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แžŸแŸ’แž“แžพแžฑแŸ’แž™แž”แž‰แŸ’แž…แžผแž›แž”แžŽแŸ’แžแžถแž‰แžšแž„แžŠแŸ‚แž›แž˜แžถแž“แžšแž”แžถแŸ†แž„ แž“แžทแž„แž˜แžทแž“แž›แžพแžŸแž–แžธแž”แžธ octets แž–แžธแž”แžŽแŸ’แžแžถแž‰แž“แŸƒแž”แžŽแŸ’แžแžถแž‰แžšแž„แžŠแžผแž…แž‚แŸ’แž“แžถ แž“แŸแŸ‡แž‚แžบแž…แžถแŸ†แž”แžถแž…แŸ‹แžŠแžพแž˜แŸ’แž”แžธแž€แŸ†แžŽแžแŸ‹แž‡แžฝแžšแžŸแŸ’แžœแŸ‚แž„แžšแž€แŸ” แžแŸ’แž‰แžปแŸ†แž–แžทแžแž‡แžถแž˜แžทแž“แž…แžผแž›แž…แžทแžแŸ’แžแž€แžถแžšแžขแž“แžปแžœแžแŸ’แžแž“แŸƒแž€แžถแžšแž”แž‰แŸ’แž‡แžถแž€แŸ‹แž›แž€แŸ’แžแžŽแŸˆแžœแžทแž“แžทแž…แŸ’แž†แŸแž™ แž“แžทแž„แž‡แžฝแžšแžŸแŸ’แžœแŸ‚แž„แžšแž€แž“แŸแŸ‡แž‘แŸ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžšแž แžผแžแž˜แž€แžŠแž›แŸ‹แž–แŸแž›แž“แŸแŸ‡ แžแŸ’แž‰แžปแŸ†แž˜แžทแž“แž”แžถแž“แžšแž€แžƒแžพแž‰แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž”แŸ’แžšแžŸแžพแžšแž‡แžถแž„แž“แŸแŸ‡แž‘แŸแŸ” แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€ แž–แžธแž”แž‰แŸ’แž‡แžธแž›แž‘แŸ’แž’แž•แž›แž“แŸƒแž”แžŽแŸ’แžแžถแž‰แžšแž„ route_list แžŠแŸ„แž™แž”แŸ’แžšแžพแžขแžแŸแžšแžŠแŸ‚แž›แž˜แžถแž“แž˜แžทแž“แž›แžพแžŸแž–แžธแž”แžธ octets แžแŸ’แž‰แžปแŸ†แž‡แŸ’แžšแžพแžŸแžšแžพแžŸแž”แžŽแŸ’แžแžถแž‰แžšแž„แžŠแŸ‚แž›แžแŸ’แž‰แžปแŸ†แž…แžถแž”แŸ‹แžขแžถแžšแž˜แŸ’แž˜แžŽแŸ

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