用php进行ip/子网到IP 地址范围的转换
(2010-05-19 14:14:11)
标签:
php程序ip掩码ip范围转换子网地址it |
分类: 技术 |
拿到一个电信网通路由的网段表,其中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已经提供了函数调用
http://cn.php.net/manual/en/function.ip2long.php
http://cn.php.net/manual/en/function.long2ip.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格式.
下面是代码:
<html>
<body>
<?php
//打开文件
$handle = fopen("d:\\CNC.txt", "r");
if ($handle) {
//下面开始将数字掩码转为IP格式的掩码

加载中…