Chinaunix首页 | 论坛 | 博客
  • 博客访问: 442055
  • 博文数量: 56
  • 博客积分: 2705
  • 博客等级: 少校
  • 技术积分: 740
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-21 13:52
文章分类

全部博文(56)

文章存档

2016年(1)

2014年(1)

2013年(5)

2012年(4)

2011年(8)

2010年(10)

2009年(15)

2008年(12)

分类: Python/Ruby

2009-10-19 13:27:29

                      由网络范围计算网络号的python脚步代码

最近老大交待了一个任务要部分网络范围让统计出以掩码形式的网络号,以为就是计算网络号嘛,就爽快的答应了;等拿到文件结果傻眼了,额滴神啊,有9万多条记录...哎,找工具吧..查了半天工具都不支持批量处理...

哎,没办法写代码吧...久违的感觉又来了...

先介绍一下用法吧,首先将ip范围以行的形成统计到execel里,然后导成以逗号(,)分隔的csv文件命名为ip.csv,然后放到脚步的同目录下,执行python network.py即可,打印结果的同时会生成ip.txt文件;

附:
#!/usr/bin/python
#source-file ip.csv(interv with',') yi ge ip fan wei
#dest-file  ip.txt 
#liuan 20091016
#filename network.py
import os
def to_binary(x) :
    result = ''
    while x > 0 :
        m = x % 2
        x = x / 2
        result = str(m) + result
    return result
def net_js(a,b) :
    A = to_binary(a)
    result = 0
    mask = 0
    B = to_binary(b)
    if len(A) > len(B) :
        length = len(A)
        result = 8 - length
    elif len(A) < len(B) :
        length = len(B)
        result = 8 - length
    else :
        length = len(A)
        i = 1
        while i < length :
          mask  = mask + 2**(length-i)*int(A[i-1])
          if A[i] != B[i] :
            result = 8 - length + i
            break
            i = i + 1
        return result,mask
def print_netmask(a , b) :
    A1 = int(a[:a.index('.')])
    a = a[a.index('.')+1:]
    B1 = int(a[:a.index('.')])
    a = a[a.index('.')+1:]
    C1 = int(a[:a.index('.')])
    a = a[a.index('.')+1:]
    D1 = int(a)
    A2 = int(b[:b.index('.')])
    b = b[b.index('.')+1:]
    B2 = int(b[:b.index('.')])
    b = b[b.index('.')+1:]
    C2 = int(b[:b.index('.')])
    b = b[b.index('.')+1:]
    D2 = int(b)
    netmask = ''
    while 1 :
       
        if A1 != A2 :
            result ,mask = net_js(A1,A2)
            netmask =  str(mask)+".0.0.0/" + str(result)
            break
        else :
            if B1 !=  B2 :
                result ,mask = net_js(B1,B2)
                netmask = str(A1)+"."+str(mask)+".0.0/"+str(8+result)
                break
            else :
                if C1 != C2 :
                    result ,mask= net_js(C1,C2)
                    netmask = str(A1)+"."+str(B1)+"."+str(mask)+".0/"+str(16+result)
                    break
                else :
                    if D1 != D2 :
                        result ,mask = net_js(D1,D2)
                        netmask = str(A1)+"."+str(B1)+"."+str(C1)+"."+str(mask)+"/"+str(24+result)
                        #netmask = str(A1)+"."+str(B1)+"."+str(C1)+"."+str(256-2**(8-result))+"/"+str(24+result)
                        break
                    else :
                        break
#        print "ok"
#    print A1, B1, C1 ,D1 ,A2 ,B2 ,C2 ,D2
#   f=open("ip.txt","a")
#    f.write(a)
#    f.write(b)
#    f.write("\r")
#    f.write(netmask)
#    f.close()
    os.system("echo %s >> ip.txt" % netmask)
    print netmask
if __name__ == "__main__" :
    f = open("ip.csv")
    list = f.readlines()
#    print len(list)
    i = 0
    while i < len(list) :
        line = list[i]
        a = line[:line.index(',')].strip()
        b = line[line.index(',')+1:].strip()
        #print a ,b
        #print  b
        print_netmask(a,b)
        i = i+1
    f.close()    



















阅读(1694) | 评论(0) | 转发(0) |
0

上一篇:TCP/IP报文格式

下一篇:linux下双网卡绑定

给主人留下些什么吧!~~