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地址在線計算器,ip掩碼計算工具,十進位轉二進位&
&

&
&