IP地址段表示方法批量轉換的方法或工具有哪些?
比如下面第一個 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
想不通啊,想不通。同樣是貼代碼為什麼有那麼多人點反對呢?
歧視匿名用戶啊。╮(╯_╰)╭
還是寫的沒有 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)
自己寫個程序吧,很快的。
==================================================================
還較真了啊,好吧:
#!/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,"
";
}
使用費用人民幣五元,請充入支付寶賬戶:xianglingjs@aliyun.com,謝謝。
另:需要本人對以上程序提供任何其它服務的,將另行計費。因使用以上程序而產生的任何結果,本人均不負責。
不用裝任何第三方軟體(特指在人民群眾熱愛的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
用Win7的計算器可以,調成程序員模式,可以直接置位和清位。
頻繁使用的話還是編個程序吧。
會編程的寫個這個小程序確實很簡單,不過BOSON有現成的免費小軟體,很好用除了子網掩碼,還有反掩碼和IP計算器:
下載地址:Subnet Calculator
有個python包IPy挺好用的:
import IPy
filename = "D:\ip.txt"
with open(filename) as f:
for line in f:
line = line.strip()
ip = IPy.IP(line)
for x in ip:
print(x)
ip地址在線計算器 ip掩碼計算工具 網路子網掩碼計算方法 十進位轉二進位拿走不謝。開發者網路狗福音~~可惜不知是誰
這種簡單的問題就不要搬出腳本了吧,人家還要安裝包,基本上,excel兩個公式搞定。現在用手機不方便,回去了試試。
==============
本來想弄個excel的版本呢,後來一想完全沒有必要,本身這樣的工具真的太多了。隨便一搜就是一大堆。所以問題的本身就在易用性上。因為我本人也有這樣的需求。。。那麼上述各位給的代碼什麼的肯定不好用對不對。因為我們這種小白級用戶不可能為了這種事再安裝其他的東西。經常換電腦什麼的是吧,著實不方便。搜了一下在線轉換的網頁也相當多,找了一個比較好的是這個
子網掩碼計算器,ip地址在線計算器,ip掩碼計算工具,十進位轉二進位
但是沒網不就不能用了不是嗎?
然後我就把核心的扒出來了,當然我附上了原始鏈接,畢竟代碼不是自己寫的,總是認為網上有的就用唄,沒必要再花精力。so侵權什麼的pm我刪掉好了。
就這樣用記事本存成ip.html什麼的, 存在電腦隨開隨用。代碼如下,複製到記事本改名ip.html就行。
=======================
&
&
&
&
&
&
&
&
&
&
&
&&&原始網頁&&
&網路和IP地址計算器&&
&顯示網路,廣播,第一次和最後一個給定的網路地址:&
& &在網路掩碼「位格式」也被稱為CIDR格式(CIDR=無類別域間路由選擇)。&
&