php ip 转,用php进行ip/子网到IP 地址范围的转换

这篇博客介绍了如何利用PHP处理电信网通路由的网段表,将IP地址与/XX子网掩码形式转换为IP网段范围。通过explode()函数切割IP和掩码,然后根据子网掩码转换为IP格式,通过按位运算获取网络段地址和广播地址。整个过程涉及到了IP2long()和long2ip()函数的使用,以及文件读取和处理。
摘要由CSDN通过智能技术生成

拿到一个电信网通路由的网段表,其中IP的显示形如:

27.8.0.0/13

27.36.0.0/14

27.40.0.0/13

....

由于设备只能用IP地址范围,而非/XX这样子网掩码的形式,因此必须将这些子网地址转换为IP网段范围的形式.

于是..祭出php,很快顺利解决..

程序思路:

0. 将字符串切分成两部分——IP 和 子网掩码(用explode()实现)

1. 转换/XX为xxx.xxx.xxx.xxx形式的子网掩码(用的笨方法,直接switch-case 一一对应即可)

2. 将ip和subnet

mask做按位and操作,这样可以找到主机位全0的网络段地址(其实这部可以忽略,因为这些ip段给的非常标准,基本上都是网络段地址,无需转换)

3. 找到结束地址即广播地址(主机位为全1),方法是首先对subnet

mask做非操作(1换0,0换1),然后做按位或的操作,即可将主机位全置1,获得结束地址

要对IP地址进行操作,先将其转为数字格式会比较好操作,好在php已经提供了函数调用

ip2long()

(PHP 4, PHP 5)

ip2long — Converts a string containing an (IPv4) Internet Protocol

dotted address into a proper address

long2ip

(PHP 4, PHP 5)

long2ip — Converts an (IPv4) Internet network address into a string

in Internet standard dotted format

考虑到用文件整行读取的方式操作比较方便,因此先将得到的网段文件存为txt格式.

下面是代码:

//打开文件

$handle = fopen("d:\\CNC.txt", "r");

if ($handle) {

while

(!feof($handle)) {

$ip = fgets($handle);//用fgets直接一行一行的取

$ip=trim($ip);//消除空格

$ipaddr = explode("/",

$ip);//将IP/网段切分开

$ip=$ipaddr[0];

$mask=$ipaddr[1];

//下面开始将数字掩码转为IP格式的掩码

switch ($mask) {

case

"8":

$mask=ip2long("255.0.0.0");

$bcmask=~$mask;

break;

case

"9":

$mask=ip2long("255.128.0.0");

$bcmask=~$mask;

break;

case

"10":

$mask=ip2long("255.192.0.0");

$bcmask=~$mask;

break;

case

"11":

$mask=ip2long("255.224.0.0");

$bcmask=~$mask;

break;

case

"12":

$mask=ip2long("255.240.0.0");

$bcmask=~$mask;

break;

case

"13":

$mask=ip2long("255.248.0.0");

$bcmask=~$mask;

break;

case

"14":

$mask=ip2long("255.252.0.0");

$bcmask=~$mask;

break;

case

"15":

$mask=ip2long("255.254.0.0");

$bcmask=~$mask;

break;

case

"16":

$mask=ip2long("255.255.0.0");

$bcmask=~$mask;

break;

case

"17":

$mask=ip2long("255.255.128.0");

$bcmask=~$mask;

break;

case

"18":

$mask=ip2long("255.255.192.0");

$bcmask=~$mask;

break;

case

"19":

$mask=ip2long("255.255.224.0");

$bcmask=~$mask;

break;

case

"20":

$mask=ip2long("255.255.240.0");

$bcmask=~$mask;

break;

case

"21":

$mask=ip2long("255.255.248.0");

$bcmask=~$mask;

break;

case

"22":

$mask=ip2long("255.255.252.0");

$bcmask=~$mask;

break;

case

"23":

$mask=ip2long("255.255.254.0");

$bcmask=~$mask;

break;

case

"24":

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值