python批量生成本地ip地址的方法


Posted in Python onMarch 23, 2015

本文实例讲述了python批量生成本地ip地址的方法。分享给大家供大家参考。具体分析如下:

这段代码用于在本地计算机上生成本地ip地址绑定到网卡,生成的是一个bat的批处理文件,运行此批处理文件,可以通过ipconfig查看

#!/usr/bin/python2.7
# -*- coding: utf-8 -*- 
# Filename: AddIPAliases.py
import re,sys,socket,struct  
# 1. 判断IP地址是否合法; 2. 判断用户输入的IP是否在Class A,Class B 或 Class C中
def CheckIP(IP,IPClassesInt):
  regexIP=re.compile('^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$')
  Checking=regexIP.match(IP)
  if Checking==None:
    IP=raw_input("亲!请输入合法的IP地址哈: ")
    return CheckIP(IP,IPClassesInt)
  else:
    IPInt=struct.unpack('!L',socket.inet_aton(IP))[0]
    if IPInt not in range(IPClassesInt[0],IPClassesInt[1]+1) and IPInt not in range(IPClassesInt[2],IPClassesInt[3]+1) and IPInt not in range(IPClassesInt[4],IPClassesInt[5]+1):
      IP=raw_input("亲!您输入的IP地址不在Class A,Class B或Class C中,请阅读提示信息并重新输入IP地址:")
      return CheckIP(IP,IPClassesInt)
    else: return IP
# 判断输入的数字是否合法
def CheckIPCount(IPCount):
  regexIPCount=re.compile('\d+')
  Checking=regexIPCount.match(IPCount)
  if Checking==None:
    IPCount=raw_input("亲!请输入合法的数量:")
    return CheckIPCount(IPCount)
  else: return IPCount
# 为用户生成指定数量的IP
def MakeIps(IPInt,IPCount,IPIntBool):
  targetBat=open('AddIPAliases.bat','w+')
  targetCSV=open('AddIPAliases.csv','w+')
  # 判断IP地址的数量是否在Class A,Class B或Class C的范畴中
  if int(IPCount)>(IPClassesInt[IPIntBoolTrue[1][2]]-IPInt+1):
    IPCount=raw_input("亲!您输入的IP数量超过了"+IPIntBoolTrue[0]+"的范畴,请重新输入:")
    return MakeIps(IPInt,IPCount,IPIntBool)
  else:
    for i in range(int(IPCount)):
      IPIntTrans=socket.inet_ntoa(struct.pack("!L", IPInt))
      IPInt+=1
      targetBat.write('netsh interface ip add address "本地连接" '+IPIntTrans+' '+IPIntBoolTrue[1][1]+'\n')
      targetCSV.write(IPIntTrans+'\n')
  targetBat.write('pause')
# Main 函数
print '''
**************************************************
以下信息能够帮助你更好的运行此脚本:
 
1. 在运行脚本前,请移步:控制面板->查看网络->本地连接->属性->IPv4,将自动获取IP改成手动
2. IP分为三类:
  Class A:数量16777216,范围10.0.0.0 - 10.255.255.255
  Class B:数量1048576, 范围172.16.0.0 - 172.31.255.255
  Class C:数量65536,  范围192.168.0.0 ? 192.168.255.255
!!!所以大家在输入IP的时候,请保证您输入的IP属于这三个分类之中!!!
3. 如果你使用的是英文系统,请将自定义函数MakeIPs()中的“本地连接”改成“Local Area Connection”。
4. 脚本由于要对长整型的数据进行range(),所以计算时间有点长,请等待成功提示。
5. 在脚本存放的目录将会生成一个bat文件和csv文件,bat文件用于向系统中添加IP,生成成功后请手动运行它,csv文件用于在Jmeter中调用这些IP。
6. 如果想清除在系统中插入的IP,请移步:控制面板->查看网络->本地连接->属性->IPv4,将手动获取IP改成自动获取IP
**************************************************
'''
# 将各个Class的起始和结束的IP地址转换成整数
IPClasses=['10.0.0.0','10.255.255.255','172.16.0.0','172.31.255.255','192.168.0.0','192.168.255.255']
IPClassesInt=[]
for i in range(len(IPClasses)):
  IPClassesInt.append(struct.unpack('!L',socket.inet_aton(IPClasses[i]))[0])
# 用户输入
IP=raw_input("请输入起始IP地址:")
IPCount=raw_input("请输入生成的IP数量:")
# 判断输入是否合法
IPAddress=CheckIP(IP,IPClassesInt)
IPCount=CheckIPCount(IPCount)
IPInt=struct.unpack('!L',socket.inet_aton(IPAddress))[0]
IPIntClassABool=IPInt in range(IPClassesInt[0],IPClassesInt[1]+1)
IPIntClassBBool=IPInt in range(IPClassesInt[2],IPClassesInt[3]+1)
IPIntClassCBool=IPInt in range(IPClassesInt[4],IPClassesInt[5]+1)
IPIntBool={"ClassA":[IPIntClassABool,'255.0.0.0',1],"ClassB":[IPIntClassBBool,'255.240.0.0',3],"ClassC":[IPIntClassCBool,'255.255.0.0',5]}
IPIntBoolTrue=[]
for i in range (len(IPIntBool)):
  if True in IPIntBool.values()[i]:
    IPIntBoolTrue.append(IPIntBool.keys()[i])
    IPIntBoolTrue.append(IPIntBool.values()[i])
    break
# 调用函数为用户生成IP地址
MakeIps(IPInt,IPCount,IPIntBoolTrue)
print "Bat文件生成完毕,请移步至存放的脚本的文件夹找到并运行此文件。"

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
深入理解Python 代码优化详解
Oct 27 Python
python清除字符串里非数字字符的方法
Jul 02 Python
python字典的常用操作方法小结
May 16 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
对python中Json与object转化的方法详解
Dec 31 Python
Python根据成绩分析系统浅析
Feb 11 Python
python增加图像对比度的方法
Jul 12 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Python3标准库之dbm UNIX键-值数据库问题
Mar 24 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
python中列表的含义及用法
May 26 Python
python通过字典dict判断指定键值是否存在的方法
Mar 21 #Python
python执行外部程序的常用方法小结
Mar 21 #Python
python使用Flask框架获取用户IP地址的方法
Mar 21 #Python
Python使用Flask框架获取当前查询参数的方法
Mar 21 #Python
Python使用Flask框架同时上传多个文件的方法
Mar 21 #Python
python中Flask框架简单入门实例
Mar 21 #Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 #Python
You might like
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
PHP实时显示输出
2008/10/02 PHP
php安装swoole扩展的方法
2015/03/19 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
在模板页面的js使用办法
2010/04/01 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
儿童编程python入门
2018/05/08 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
函授毕业生自我鉴定范文
2014/03/25 职场文书
委托公证书
2014/04/08 职场文书
员工辞退通知书
2015/04/17 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
导游词之镜泊湖
2019/12/09 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL
如何利用golang运用mysql数据库
2022/03/13 Golang
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript