Junos PyEZ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ - "рдЕрдЬрдЧрд░ microframework рдЬреЛ рдЖрдкрдХреЛ Junos OS рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ" рд╕реНрд╡рдЪрд╛рд▓рди рдФрд░ рдирд┐рдпрдВрддреНрд░рдг, рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓рд┐рдЦрдирд╛ рдХрдИ рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддрд╛ рд╣реИ - рдкрд╛рдпрдерди рд╕реАрдЦрдирд╛ рдФрд░ рдЬреВрдиреЛрд╕ рдУрдПрд╕ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ред рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкрд╛рдпрдерди + рдЬреВрдиреЛрд╕ PyEZ рдмрдВрдбрд▓ рдХреА рдкрд╕рдВрдж рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реАрдорд╛ рдФрд░ Junos PyEZ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рдХрд╛рд░рдг рдмрдирд╛рдИ рдЧрдИ рдереА, рдЬрд┐рд╕реЗ Junos OS рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдХрд╛рд░реНрдп
рдСрдбрд┐рдЯрд┐рдВрдЧ рдХрдВрдкрдиреА рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реА ipv4 рдореБрдХреНрдд рд╕рдмрдиреЗрдЯред рд╕рдмрдиреЗрдЯ рдореБрдлрд╝реНрдд рд╣реИ рдХрд┐ рдорд╛рдирджрдВрдб рд╕реНрд╡рд┐рдЪ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рд░реНрдЧреЛрдВ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реИ рдЬреЛ рд░рдирд░реЛрд╕ рдУрдПрд╕ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рдЙрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдкрд╛рдпрдерди + рдЬреВрдиреЛрд╕ PyEZ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдкреИрд░рд╛рдореАрдХреЛ рдФрд░ ssh.exec_command рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд▓реЛрднрди рдерд╛,
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдиреЗрдЯрдХреЙрдиреНрдлрд╝ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рдмрдВрдзрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред Netconf рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ (RPC) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ XML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
PyPI рд╕реЗ Junos PyEZ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
$ pip install junos-eznc
рдЖрдк рдирд┐рдореНрди рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде GitHub рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рд╕реЗ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ pip install git+https://github.com/Juniper/py-junos-eznc.git
рдФрд░ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
$ pip install -r requirements.txt
рдпрд╣ рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЧрд╛рдпрдм рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред рдореЗрд░реЗ
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВред рдЗрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рджреЛ рд╣реИрдВ, рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
junos-eznc netaddr
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИ, рдЖрдк рдХреБрдВрдЬреА show_route.py -u <user_name> getpass.getpass рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдХреЗ рддрд╣рдд рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕реНрдЯрдбрд┐рди рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд╣реАрдВ рд░рд╣реЗрдЧрд╛ред рдЙрдкрдХрд░рдг рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдз рдкрд░ рдЗрд╕рдХреЗ рд╣реЛрд╕реНрдЯрдирд╛рдо рдпрд╛ рдЖрдИрдкреА-рдкрддреЗ рдХреЛ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рд╣реИрдВред
Junos PyEZ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдВрд╕реЛрд▓, рдЯреЗрд▓рдиреЗрдЯ рдпрд╛ рдиреЗрдЯрдХреЙрдиреНрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Junos OS рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦ рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдХрд░рдг рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 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
рдЖрд░рдкреАрд╕реА рдХрдорд╛рдВрдб рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рдХрд░, рд╣рдо рдЕрдиреБрд░реЛрдз рдЯреИрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЖрд░рдкреАрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдореЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдЖрдк рдмреНрдпрд╛рдЬ рдХреЗ рдЕрдиреНрдп рдирд╛рдореЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдЯреИрдЧ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдзрд┐ рдирд╛рдо рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╣рд╛рдЗрдкрд░рд╕реЗрдВрд╕ рдХреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВред
user@router> show route | display xml rpc <rpc-reply xmlns:junos="http://xml.juniper.net/junos/15.1R1/junos"> <rpc> <get-route-information> </get-route-information> </rpc> </rpc-reply>
рдореБрдЭреЗ xml рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд░реВрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЪреБрдирд╛ рдЬреЛ рдореБрдЭреЗ рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ
<rt-рдЧрдВрддрд╡реНрдп> xxx.xxx.xxx.xxx/yy </ rt-рдЧрдВрддрд╡реНрдп> рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЪрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХреАред рд╡реНрдпрд╕реНрдд рд╕рдмрдиреЗрдЯред
route_list = data.xpath("//rt-destination/text()")
рдореИрдВрдиреЗ рдмрд╛рдХреА рдХреЛ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓реВрдк рдореЗрдВ рд▓рдкреЗрдЯ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЕрдЧрд░ рдореБрдЭреЗ рдЙрди рд╕рдмрдиреЗрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕рдмрдиреЗрдЯ рдкрд░ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд░рд╛рдЙрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реЛред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд░реВрдЯрд░ рдкрд░ рдореИрдВ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдХреЗрд╡рд▓ OSPF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕реАрдорд╛ рд░рд╛рдЙрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
data = dev.rpc.get_ospf_route_information()
рдЕрдм рдЬрдмрдХрд┐ рд▓реВрдк рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ
рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдорд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдмрдиреЗрдЯ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рд╣реА рд╕рдмрдиреЗрдЯ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рддреАрди рд╕реЗ рдЕрдзрд┐рдХ рдСрдХреНрдЯреЗрдЯ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдпрд╣ рдЦреЛрдЬ рд░реЗрдВрдЬ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдкрджрдВрдб рдФрд░ рдЦреЛрдЬ рд╕реАрдорд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореБрдЭреЗ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, path_list рд╕рдмрдиреЗрдЯ рдХреА рдкреНрд░рд╛рдкреНрдд рд╕реВрдЪреА рд╕реЗ, рддреАрди рд╕реЗ рдЕрдзрд┐рдХ рдСрдХреНрдЯреЗрдЯ рд╡рд╛рд▓реЗ рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЕрдкрдиреЗ рд╣рд┐рдд рдХреЗ рд╕рдмрдиреЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ
tmp = re.search(r'^%s\S*' % subnet_search, route_list[i])
IPNetwork, netaddr рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдореБрдЭреЗ ipv4 рдкрддреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрдиреЗрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ
range_subnet = netaddr.IPNetwork(tmp.group(0))
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдорд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЖрдИрдкреАрдПрди рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореБрдЭреЗ рдХрдИ рдкрддреЗ рдорд┐рд▓рддреЗ рд╣реИрдВ рдФрд░ рд╡реНрдпрд╕реНрдд рдкрддреЗ рдХреА рд╕реВрдЪреА рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рд╕рднреА рдкрддреЗ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВред
for i in set(net_list).difference(set(busyip)): freeip.append(i)
рдореИрдВ рд╕рдмрдиреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдлреНрдд рдкрддреЛрдВ рдХреА рдкреНрд░рд╛рдкреНрдд рд╕реВрдЪреА рдореЗрдВ рдХрдЯреМрддреА рдХрд░рддрд╛ рд╣реВрдВ
print(netaddr.IPSet(freeip))
рдиреАрдЪреЗ рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдЬреЛ рд░рд╛рдЙрдЯрд░, ex4550, ex4600 рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реНрд╡рд┐рдЪ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдИ рд╣реИ