兩種狀況,一種給的是IP 範圍,給了一個區間例如
參考:http://www.cnblogs.com/amaoxi...html
64.233.196.0-64.233.196.25#將這個範圍內的IP 所有解析出來
另外一種狀況就是給了一個掩碼地址,例如python
192.168.1.0/24 或者192.168.1.0 255.255.255.0 #將這個掩碼範圍內的全部 IP 地址解析輸出出來
#coding:utf-8 def ip2num(ip): ips = [int(x) for x in ip.split('.')] return ips[0]<< 24 | ips[1]<< 16 | ips[2] << 8 | ips[3] def num2ip (num): return '%s.%s.%s.%s' % ((num >> 24) & 0xff, (num >> 16) & 0xff, (num >> 8) & 0xff, (num & 0xff)) #return '%s.%s.%s.%s' % ((num & 0xff000000)>>24,(num & 0x00ff0000)>>16,(num & 0x00000ff00)>>8,num & 0x000000ff) def gen_ip(ip): start ,end = [ip2num(x) for x in ip.split('-')] return [num2ip(num) for num in range(start,end+1) if num & 0xff] print gen_ip(64.233.196.0-64.233.196.25) 輸入結果爲: ['64.233.196.22', '64.233.196.23', '64.233.196.24', '64.233.196.25', '64.233.196.26', '64.233.196.27', '64.233.196.28', '64.233.196.29'] 利用0xff 把多生成的ip屏蔽掉 最後一句中 if num & 0xff 做用是過濾掉 最後一段爲 0 的IP
利用 IPy 這個 python 自帶的模塊網絡
from IPy import IP ip = IP('192.168.0.0/24') print ip.len() for x in ip: print(x)
反向解析名稱、IP類型、IP轉換等 >>> ip = IP('192.168.1.20') >>> ip.reverseNames() #反向解析地址格式 ['20.1.168.192.in-addr.arpa.'] >>> ip.iptype() #私網類型 'PRIVATE' >>> IP('8.8.8.8').iptype() #公網類型 'PUBLIC' >>> IP('8.8.8.8').int() #轉換爲整型格式 134744072 >>> IP('8.8.8.8').strHex() #轉換爲十六進制格式 '0x8080808' >>> IP('8.8.8.8').strBin() #轉換成二進制格式 '00001000000010000000100000001000' >>> print IP('0x8080808') #十六進制轉換爲IP格式 8.8.8.8 >>> print IP(134744072) #整型格式轉換爲IP格式 8.8.8.8 IP方法也支持網絡地址的轉換,例如根據IP和掩碼產生網段格式 >>> print (IP('192.168.1.0').make_net('255.255.255.0')) 192.168.1.0/24 >>> print (IP('192.168.1.0/255.255.255.0',make_net=True)) 192.168.1.0/24 >>> print (IP('192.168.1.0-192.168.1.255',make_net=True)) 192.168.1.0/24 經過strNormal方法指定不一樣wantprefixlen參數值以定製不一樣輸出類型的網段,輸出類型爲字符串 >>> IP('192.168.1.0/24').strNormal(0) #無返回 '192.168.1.0' >>> IP('192.168.1.0/24').strNormal(1) #prefix格式 '192.168.1.0/24' >>> IP('192.168.1.0/24').strNormal(2) #decimalnetmask格式 '192.168.1.0/255.255.255.0' >>> IP('192.168.1.0/24').strNormal(3) #lastIP格式 '192.168.1.0-192.168.1.255'
使用python將IP段範圍轉換成CIDR工具
由於最近在整理用於某些工具使用的IP段,像一些IP範圍如:64.233.56.37-64.233.56.215,某些軟件不支持,只支持像:64.233.56.37/26這樣的CIDR格式,因而就在網上找了一下轉換的方法,還真找到了不過是外語,這裏簡單記錄下須要的工具。插件
首先要準備一個python環境,安裝netaddr插件,本人用的是提取的輕量級python環境,因此直接下載官網的源碼,解壓後找到netaddr文件夾複製到python環境目錄的lib文件夾裏便可。code
使用方法: # 首先引入netaddr import netaddr # 肯定起始和結尾IP,不管多複雜均可以轉換 startip = '64.233.56.37' endip = '64.233.56.215' cidrs = netaddr.iprange_to_cidrs(startip, endip) for k, v in enumerate(cidrs): iplist = v print iplist 運行後輸出結果: 64.233.56.37/32 64.233.56.38/31 64.233.56.40/29 64.233.56.48/28 64.233.56.64/26 64.233.56.128/26 64.233.56.192/28 64.233.56.208/29