注册
登录
提问时间:2016/11/29 9:14:00
比如下面第一个 139.208.0.0/13 可以转换成 139.208.0.1-139.215.255.255
怎么把好多这样的地址批量转换

139.208.0.0/13
139.226.0.0/15
14.204.0.0/15
140.206.0.0/15
150.255.0.0/16
153.0.0.0/16
153.101.0.0/16
153.3.0.0/16
153.34.0.0/15
153.36.0.0/15
153.99.0.0/16
1楼(未知网友)

这个方法很好! 有办法实现逆向转换吗?
比如将:10.10.10.1-10.10.10.255 转换成 10.10.10.1/24
2楼(站大爷用户)

自己写一个就好了,还可以通过两个IP计算出包含这两个IP的最小范围。





CIDR Match



























IP1
IP2
CIDR




















CIDR
IP1
IP2




3楼(未知网友)

这种简单的问题就不要搬出脚本了吧,人家还要安装包,基本上,excel两个公式搞定。现在用手机不方便,回去了试试。
==============
本来想弄个excel的版本呢,后来一想完全没有必要,本身这样的工具真的太多了。随便一搜就是一大堆。所以问题的本身就在易用性上。因为我本人也有这样的需求。。。那么上述各位给的代码什么的肯定不好用对不对。因为我们这种小白级用户不可能为了这种事再安装其他的东西。经常换电脑什么的是吧,着实不方便。搜了一下在线转换的网页也相当多,找了一个比较好的是这个
子网掩码计算器,ip地址在线计算器,ip掩码计算工具,十进制转二进制
但是没网不就不能用了不是吗?
然后我就把核心的扒出来了,当然我附上了原始链接,毕竟代码不是自己写的,总是认为网上有的就用呗,没必要再花精力。so侵权什么的pm我删掉好了。
就这样用记事本存成ip.html什么的, 存在电脑随开随用。代码如下,复制到记事本改名ip.html就行。
=======================






子网掩码计算器,ip地址在线计算器,ip掩码计算工具,十进制转二进制






子网掩码计算器_ip地址在线计算器_ip掩

码计算工具_十进制转二进制






网络和IP地址计算器






网络和IP地址计算器


显示网络,广播,第一次和最后一个给定的网络地址:


IP/掩码位:



/




结果结果:





















可用地址:
掩码:




网络:




第一个可用:




最后可用:




广播:







在网络掩码“位格式”也被称为CIDR格式(CIDR=无类别域间路由选择)。









IP地址和网络转换器



IP地址和网络转换器


子网掩码转换器(对位点分十进制格式)






结果: /










子网掩码转换器(位点分十进制格式)



/


在线科学计算器
结果:
Dec 十进制:


Hex十六进制:








所需数量掩码地址转换器




需要地址的数量:



结果:
掩码: / dotted
dec. 掩码:

可用的地址数量:









点分十进制IP地址掩码转换二进制和十六进制







结果:
Bin 二进制:


Hex十六进制:








十六进制掩码转换点分十进制IP地址






结果:
点分十进制:


Bin二进制:
name=bits_3>





计算位补一个IP地址(逆)

name=ip_4> 结果:
name=invert_4>









掩码转换到网络可用地址的数量



掩码: /



结果:
可用地址的数量: 地址总数:

点分十进制格式:







IP组播地址范围



所有的多播地址可以很容易被认出,因为同位模式“1110”开始。

224.0.0.0 - 224.0.0.255知名多播地址,控制通道

224.0.1.0 - 238.255.255.255全球范围的(互联网宽)组播地址

239.0.0.0 - 239.255.255.255本地多播地址












4楼(未知网友)

不用装任何第三方软件(特指在人民群众热爱的Windows之下)的版本来啦
算法完全照抄 @波斯基

ip地址保存在 ip.txt里

@ECHO OFF
FOR /F "tokens=1,2,3,4,5 delims=./" %%a IN (ip.txt) DO CALL :SUB_PARSE %%a %%b %%c %%d %%e
GOTO :eof

:SUB_PARSE

SET /a v=( %1 "<<" 24 ) "|" ( %2 "<<" 16 ) "|" ( %3 "<<" 8 ) "|" %4
SET /a m=(-1) "<<" (32 - %5)
SET /a x=(v "&" m) + 1
SET /a y=v "|" ("~" m)
SET /a x1=((x ">>" 24) + 256) "&" 0x000000FF
SET /a x2=(((x "<<" 8) ">>" 24) + 256) "&" 0x000000FF
SET /a x3=(((x "<<" 16) ">>" 24) + 256) "&" 0x000000FF
SET /a x4=(((x "<<" 24) ">>" 24) + 256) "&" 0x000000FF
SET /a y1=((y ">>" 24) + 256) "&" 0x000000FF
SET /a y2=(((y "<<" 8) ">>" 24) + 256) "&" 0x000000FF
SET /a y3=(((y "<<" 16) ">>" 24) + 256) "&" 0x000000FF
SET /a y4=(((y "<<" 24) ">>" 24) + 256) "&" 0x000000FF
ECHO %x1%.%x2%.%x3%.%x4%-%y1%.%y2%.%y3%.%y4%

GOTO :eof
5楼(匿名用户)

想不通啊,想不通。同样是贴代码为什么有那么多人点反对呢?
歧视匿名用户啊。╮(╯_╰)╭
还是写的没有 perl 那么艺术啊。╮(╯﹏╰)╭
还是说我程序写错了啊 T_T
===分割线===
我也来凑个热闹

import sys

def ip_to_str(ip):
_ip = [None] * 4
_ip[0] = (ip & 0xff000000) >> 24
_ip[1] = (ip & 0x00ff0000) >> 16
_ip[2] = (ip & 0x0000ff00) >> 8
_ip[3] = (ip & 0x000000ff)

return '.'.join([str(i) for i in _ip])


def convert_to_seg(ip):
ip, mask_len = ip.split('/')
ip = sum([int(part_ip)*256**(3-i)
for i, part_ip in enumerate(ip.split('.'))])

mask_len = int(mask_len)

low_mask = 0xffffffff << (32-mask_len)
low_ip = ip_to_str((ip & low_mask)+1)

high_mask = 0xffffffff >> mask_len
high_ip = ip_to_str(ip | high_mask)

return '-'.join((low_ip, high_ip))


if __name__ == '__main__':
filename = sys.argv(1)

with open(filename) as f:
for line in f:
line = line.strip()
print convert_to_seg(line)
6楼(站大爷用户)

用Win7的计算器可以,调成程序员模式,可以直接置位和清位。
频繁使用的话还是编个程序吧。
7楼(站大爷用户)

自己写个程序吧,很快的。


==================================================================
还较真了啊,好吧:


#!/usr/bin/perl
open(FILE,$ARGV[0]);
while(){
$line=$_;
$max=$min=0;
$MaxIPs=$MinIPs="";
@data=split('/', $line);
@octs=split('\.',$data[0]);
$mask=$data[1];
$IPNumber=$octs[0]*256*256*256+$octs[1]*256*256+$octs[2]*256+$octs[3];
$BinaryIP=unpack("B32", pack("N", $IPNumber));
for($i=0;$i<32;$i++){
$temp=((32-$i)>$mask)?1:0;
$max+=(1-$temp)*(2**$i);
$min+=$temp*(2**$i);
}
$maxb=unpack("B32", pack("N", $max));
$minb=unpack("B32", pack("N", $min));
$MaxIP=$IPNumber|$min;
$MinIP=$IPNumber&$max;
$BinaryMaxIP=unpack("B32",pack("N",$MaxIP));
$BinaryMinIP=unpack("B32",pack("N",$MinIP));
@BinaryMaxIPOct=(substr($BinaryMaxIP,0,8), substr($BinaryMaxIP,8,8), substr($BinaryMaxIP,16,8), substr($BinaryMaxIP,24,8));
@BinaryMinIPOct=(substr($BinaryMinIP,0,8), substr($BinaryMinIP,8,8), substr($BinaryMinIP,16,8), substr($BinaryMinIP,24,8));
for($j=0;$j<3;$j++){
$MaxIPs .= ord(pack("B8", $BinaryMaxIPOct[$j])).".";
$MinIPs .= ord(pack("B8", $BinaryMinIPOct[$j])).".";
}
$MaxIPs.=ord(pack("B8",$BinaryMaxIPOct[3]));
$MinIPLastOct=ord(pack("B8",$BinaryMinIPOct[3]));
$MinIPs.=($mask==32)?$MinIPLastOct:$MinIPLastOct+1;
print $MinIPs,"-",$MaxIPs,"\n";
}
立即注册站大爷用户,免费试用全部产品
立即注册站大爷用户,免费试用全部产品