posts - 241,  comments - 116,  trackbacks - 0
          一、基本知識(shí)點(diǎn)

           

          IP ——> 整數(shù):

          • 把IP地址轉(zhuǎn)化為字節(jié)數(shù)組
          • 通過左移位(<<)、與(&)、或(|)這些操作轉(zhuǎn)為int

          整數(shù) ——> IP:

          • 將整數(shù)值進(jìn)行右移位操作(>>>),右移24位,再進(jìn)行與操作符(&)0xFF,得到的數(shù)字即為第一段IP。
          • 將整數(shù)值進(jìn)行右移位操作(>>>),右移16位,再進(jìn)行與操作符(&)0xFF,得到的數(shù)字即為第二段IP。
          • 將整數(shù)值進(jìn)行右移位操作(>>>),右移8位,再進(jìn)行與操作符(&)0xFF,得到的數(shù)字即為第三段IP。
          • 將整數(shù)值進(jìn)行與操作符(&)0xFF,得到的數(shù)字即為第四段IP。

          二、java代碼示例

              IPv4Util.java
          package michael.utils;

          import java.net.InetAddress;

          /**
           * @author michael <br>
           *         blog: http://sjsky.iteye.com <br>
           *         mail: sjsky007@gmail.com
           */
          public class IPv4Util {

              private final static int INADDRSZ = 4;

              /**
               * 把IP地址轉(zhuǎn)化為字節(jié)數(shù)組
               * @param ipAddr
               * @return byte[]
               */
              public static byte[] ipToBytesByInet(String ipAddr) {
                  try {
                      return InetAddress.getByName(ipAddr).getAddress();
                  } catch (Exception e) {
                      throw new IllegalArgumentException(ipAddr + " is invalid IP");
                  }
              }JTA實(shí)踐:Spring+ATOMIKOS

              /**
               * 把IP地址轉(zhuǎn)化為int
               * @param ipAddr
               * @return int
               */
              public static byte[] ipToBytesByReg(String ipAddr) {
                  byte[] ret = new byte[4];
                  try {
                      String[] ipArr = ipAddr.split("\\.");
                      ret[0] = (byte) (Integer.parseInt(ipArr[0]) & 0xFF);
                      ret[1] = (byte) (Integer.parseInt(ipArr[1]) & 0xFF);
                      ret[2] = (byte) (Integer.parseInt(ipArr[2]) & 0xFF);
                      ret[3] = (byte) (Integer.parseInt(ipArr[3]) & 0xFF);
                      return ret;
                  } catch (Exception e) {
                      throw new IllegalArgumentException(ipAddr + " is invalid IP");
                  }

              }

              /**
               * 字節(jié)數(shù)組轉(zhuǎn)化為IP
               * @param bytes
               * @return int
               */
              public static String bytesToIp(byte[] bytes) {
                  return new StringBuffer().append(bytes[0] & 0xFF).append('.').append(
                          bytes[1] & 0xFF).append('.').append(bytes[2] & 0xFF)
                          .append('.').append(bytes[3] & 0xFF).toString();
              }

              /**
               * 根據(jù)位運(yùn)算把 byte[] -> int
               * @param bytes
               * @return int
               */
              public static int bytesToInt(byte[] bytes) {
                  int addr = bytes[3] & 0xFF;
                  addr |= ((bytes[2] << 8) & 0xFF00);
                  addr |= ((bytes[1] << 16) & 0xFF0000);
                  addr |= ((bytes[0] << 24) & 0xFF000000);
                  return addr;
              }

              /**
               * 把IP地址轉(zhuǎn)化為int
               * @param ipAddr
               * @return int
               */
              public static int ipToInt(String ipAddr) {
                  try {
                      return bytesToInt(ipToBytesByInet(ipAddr));
                  } catch (Exception e) {
                      throw new IllegalArgumentException(ipAddr + " is invalid IP");
                  }
              }

              /**
               * ipInt -> byte[]
               * @param ipInt
               * @return byte[]
               */
              public static byte[] intToBytes(int ipInt) {
                  byte[] ipAddr = new byte[INADDRSZ];
                  ipAddr[0] = (byte) ((ipInt >>> 24) & 0xFF);
                  ipAddr[1] = (byte) ((ipInt >>> 16) & 0xFF);
                  ipAddr[2] = (byte) ((ipInt >>> 8) & 0xFF);
                  ipAddr[3] = (byte) (ipInt & 0xFF);
                  return ipAddr;
              }

              /**
               * 把int->ip地址
               * @param ipInt
               * @return String
               */
              public static String intToIp(int ipInt) {
                  return new StringBuilder().append(((ipInt >> 24) & 0xff)).append('.')
                          .append((ipInt >> 16) & 0xff).append('.').append(
                                  (ipInt >> 8) & 0xff).append('.').append((ipInt & 0xff))
                          .toString();
              }

              /**
               * 把192.168.1.1/24 轉(zhuǎn)化為int數(shù)組范圍
               * @param ipAndMask
               * @return int[]
               */
              public static int[] getIPIntScope(String ipAndMask) {

                  String[] ipArr = ipAndMask.split("/");
                  if (ipArr.length != 2) {
                      throw new IllegalArgumentException("invalid ipAndMask with: "
                              + ipAndMask);
                  }
                  int netMask = Integer.valueOf(ipArr[1].trim());
                  if (netMask < 0 || netMask > 31) {
                      throw new IllegalArgumentException("invalid ipAndMask with: "
                              + ipAndMask);
                  }
                  int ipInt = IPv4Util.ipToInt(ipArr[0]);
                  int netIP = ipInt & (0xFFFFFFFF << (32 - netMask));
                  int hostScope = (0xFFFFFFFF >>> netMask);
                  return new int[] { netIP, netIP + hostScope };

              }

              /**
               * 把192.168.1.1/24 轉(zhuǎn)化為IP數(shù)組范圍
               * @param ipAndMask
               * @return String[]
               */
              public static String[] getIPAddrScope(String ipAndMask) {
                  int[] ipIntArr = IPv4Util.getIPIntScope(ipAndMask);
                  return new String[] { IPv4Util.intToIp(ipIntArr[0]),
                          IPv4Util.intToIp(ipIntArr[0]) };
              }

              /**
               * 根據(jù)IP 子網(wǎng)掩碼(192.168.1.1 255.255.255.0)轉(zhuǎn)化為IP段
               * @param ipAddr ipAddr
               * @param mask mask
               * @return int[]
               */
              public static int[] getIPIntScope(String ipAddr, String mask) {

                  int ipInt;
                  int netMaskInt = 0, ipcount = 0;
                  try {
                      ipInt = IPv4Util.ipToInt(ipAddr);
                      if (null == mask || "".equals(mask)) {
                          return new int[] { ipInt, ipInt };
                      }
                      netMaskInt = IPv4Util.ipToInt(mask);
                      ipcount = IPv4Util.ipToInt("255.255.255.255") - netMaskInt;
                      int netIP = ipInt & netMaskInt;
                      int hostScope = netIP + ipcount;
                      return new int[] { netIP, hostScope };
                  } catch (Exception e) {
                      throw new IllegalArgumentException("invalid ip scope express  ip:"
                              + ipAddr + "  mask:" + mask);
                  }

              }

              /**
               * 根據(jù)IP 子網(wǎng)掩碼(192.168.1.1 255.255.255.0)轉(zhuǎn)化為IP段
               * @param ipAddr ipAddr
               * @param mask mask
               * @return String[]
               */
              public static String[] getIPStrScope(String ipAddr, String mask) {
                  int[] ipIntArr = IPv4Util.getIPIntScope(ipAddr, mask);
                  return new String[] { IPv4Util.intToIp(ipIntArr[0]),
                          IPv4Util.intToIp(ipIntArr[0]) };
              }

              /**
               * @param args
               * @throws Exception
               */
              public static void main(String[] args) throws Exception {
                  String ipAddr = "192.168.8.1";

                  byte[] bytearr = IPv4Util.ipToBytesByInet(ipAddr);

                  StringBuffer byteStr = new StringBuffer();

                  for (byte b : bytearr) {
                      if (byteStr.length() == 0) {
                          byteStr.append(b);
                      } else {
                          byteStr.append("," + b);
                      }
                  }
                  System.out.println("IP: " + ipAddr + " ByInet --> byte[]: [ " + byteStr
                          + " ]");

                  bytearr = IPv4Util.ipToBytesByReg(ipAddr);
                  byteStr = new StringBuffer();

                  for (byte b : bytearr) {
                      if (byteStr.length() == 0) {
                          byteStr.append(b);
                      } else {
                          byteStr.append("," + b);
                      }
                  }
                  System.out.println("IP: " + ipAddr + " ByReg  --> byte[]: [ " + byteStr
                          + " ]");

                  System.out.println("byte[]: " + byteStr + " --> IP: "
                          + IPv4Util.bytesToIp(bytearr));

                  int ipInt = IPv4Util.ipToInt(ipAddr);

                  System.out.println("IP: " + ipAddr + "  --> int: " + ipInt);

                  System.out.println("int: " + ipInt + " --> IP: "
                          + IPv4Util.intToIp(ipInt));

                  String ipAndMask = "192.168.1.1/24";

                  int[] ipscope = IPv4Util.getIPIntScope(ipAndMask);
                  System.out.println(ipAndMask + " --> int地址段:[ " + ipscope[0] + ","
                          + ipscope[1] + " ]");

                  System.out.println(ipAndMask + " --> IP 地址段:[ "
                          + IPv4Util.intToIp(ipscope[0]) + ","
                          + IPv4Util.intToIp(ipscope[1]) + " ]");

                  String ipAddr1 = "192.168.1.1", ipMask1 = "255.255.255.0";

                  int[] ipscope1 = IPv4Util.getIPIntScope(ipAddr1, ipMask1);
                  System.out.println(ipAddr1 + " , " + ipMask1 + "  --> int地址段 :[ "
                          + ipscope1[0] + "," + ipscope1[1] + " ]");

                  System.out.println(ipAddr1 + " , " + ipMask1 + "  --> IP地址段 :[ "
                          + IPv4Util.intToIp(ipscope1[0]) + ","
                          + IPv4Util.intToIp(ipscope1[1]) + " ]");

              }
          }
          posted on 2011-07-08 10:48 墻頭草 閱讀(13500) 評(píng)論(1)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
          主站蜘蛛池模板: 富民县| 得荣县| 阜康市| 郧西县| 望江县| 浙江省| 兴和县| 巩留县| 林周县| 壤塘县| 炎陵县| 八宿县| 思茅市| 荆州市| 吉木乃县| 图木舒克市| 吉隆县| 砀山县| 大宁县| 开封市| 马公市| 奈曼旗| 连州市| 天水市| 潍坊市| 娄烦县| 资溪县| 汶上县| 申扎县| 迁西县| 北票市| 准格尔旗| 湘乡市| 德州市| 图们市| 佛教| 南宫市| 绵阳市| 永安市| 吴堡县| 开江县|