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带你玩转冲顶大会
Jan 17 Python
python用插值法绘制平滑曲线
Feb 19 Python
解决新django中的path不能使用正则表达式的问题
Dec 18 Python
Python中new方法的详解
Jan 15 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
python中Lambda表达式详解
Nov 20 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
python unichr函数知识点总结
Dec 16 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 Python
详解Python内置模块Collections
Mar 22 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
咖啡语言
2021/03/03 咖啡文化
一个简单计数器的源代码
2006/10/09 PHP
php URL验证正则表达式
2011/07/19 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
分享3个php获取日历的函数
2015/09/25 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
总结python爬虫抓站的实用技巧
2016/08/09 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python实现dijkstra最短路由算法
2019/01/17 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
python中property和setter装饰器用法
2019/12/19 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
生产总经理岗位职责
2013/12/19 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
市场专员岗位职责
2014/02/14 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL