使用Python管理网络设备( 五 )

最外层的for循环用来遍历设备列表,然后在每次循环(每个设备)中生成范围为300~400的VLAN ID并将它们推送到当前设备 。
脚本运行结果如下 。

使用Python管理网络设备

文章插图
 
当然,也可以通过交换机控制台检查运行结果(仅显示部分结果) 。
使用Python管理网络设备

文章插图
 
4.3 使用netaddr处理IP地址和网络管理和操作IP地址是网络工程师最重要的任务之一 。Python开发人员提供了一个令人惊叹的库—— netaddr,它可以识别IP地址并对其进行处理 。假设你开发了一个应用程序,其中需要获取129.183.1.55/21的网络地址和广播地址,通过模块内的内置方法network和broadcast可以轻松地获取到相应的地址 。
net.network129.183.0.net.broadcast129.183.0.0netaddr支持很多功能 。
在第3层的地址中,netaddr支持下列功能 。
  • 识别IPv4和IPv6地址、子网、掩码和前缀 。
  • 对IP网络进行迭代、切片、排序、汇总和分类 。
  • 处理各种格式(CIDR、任意子网长度、nmap) 。
  • 对IP地址和子网进行集合操作(联合、交叉等) 。
  • 解析各种不同的格式和符号 。
  • 查找IANA IP块信息 。
  • 生成DNS反向查找结果 。
  • 检索超网和生成子网 。
在第2层的地址中,netaddr支持下列功能 。
  • 展示和操作mac地址与EUI-64标识符 。
  • 查找IEEE组织信息(OUI、IAB) 。
  • 生成链路本地的IPv6地址 。
4.3.1 安装netaddr使用pip安装netaddr模块,命令如下 。
pip install netaddr安装完成之后打开PyCharm或Python控制台并导入模块,验证模块是否安装成功 。如果没有出现错误信息,说明模块安装成功 。
python>>>import netaddr4.3.2 使用netaddr的方法netaddr模块提供了两种重要的方法来定义IP地址并对其进行处理 。第一种方法是IPAddress(),它用来定义具有默认子网掩码的单个有类IP地址 。第二种方法是IPNetwork(),它使用CIDR定义无类IP地址 。
两种方法都将IP地址作为字符串来处理,根据字符串返回IP地址或IP网络对象 。返回的对象还可以继续执行许多方法,比如判断IP地址是单播地址、多播地址、环回地址、私有地址还是公有地址,以及地址有效还是无效地址 。这些操作的结果是True或False 。在Python的if条件中可以直接使用这些方法 。
另外,该模块支持使用==、<和>等比较运算符比较两个 IP 地址,从而生成子网 。它还可以检索一个给定IP地址或者子网术语的超网列表 。最终,netaddr模块可以生成有效主机的一个完整列表(不包括网络IP地址和网络广播地址) 。
#!/usr/bin/python__author__ = "Bassim Aly"__EMAIL__ = "basim.alyy@gmail.com"from netaddr import IPNetwork,IPAddressdef check_ip_address(ipaddr):ip_attributes = []ipaddress = IPAddress(ipaddr)if ipaddress.is_private():ip_attributes.append("IP Address is Private")else:ip_attributes.append("IP Address is public")if ipaddress.is_unicast():ip_attributes.append("IP Address is unicast")elif ipaddress.is_multicast():ip_attributes.append("IP Address is multicast")if ipaddress.is_loopback():ip_attributes.append("IP Address is loopback")return "n".join(ip_attributes)def operate_on_ip_network(ipnet):net_attributes = []net = IPNetwork(ipnet)net_attributes.append("Network IP Address is " + str(net.network) + "and Netowrk Mask is " + str(net.netmask))net_attributes.append("The Broadcast is " + str(net.broadcast) )net_attributes.append("IP Version is " + str(net.version) )net_attributes.append("Information known about this network is " +str(net.info) )net_attributes.append("The IPv6 representation is " + str(net.ipv6()))net_attributes.append("The Network size is " + str(net.size))net_attributes.append("Generating a list of ip addresses inside thesubnet")for ip in net:net_attributes.append("t" + str(ip))return "n".join(net_attributes)ipaddr = raw_input("Please Enter the IP Address: ")print check_ip_address(ipaddr)ipnet = raw_input("Please Enter the IP Network: ")print operate_on_ip_network(ipnet)在上面的脚本中,首先使用raw_input()函数请求用户输入IP地址和IP网络,然后将输入的值作为参数传递给两个用户方法check_ip_address()和operate_on_ip_network()并调用它们 。第一个函数check_ip_address()会检查输入的IP地址,同时尝试生成有关IP地址属性的报告(例如,IP地址是单播、多播、私有还是环回地址),并将输出返回给用户 。


推荐阅读