黑马程序员技术交流社区

标题: IP地址转换成10进制整数 [打印本页]

作者: 乔兵    时间: 2013-10-9 06:56
标题: IP地址转换成10进制整数
一、由域名求IP地址的程序
下面程序由命令行输入域名,输出ip
  1. import java.net.*;
  2. public class nslookup {
  3. //Usage:java nslookup hostname
  4. public static void main (String argv[]) throws Exception {
  5. String host=argv[0];
  6. InetAddress address=null;
  7. try {
  8. address=InetAddress.getByName(host);
  9. } catch(UnknownHostException e) {
  10. System.out.println("Unknown host");
  11. System.exit(0);
  12. }
  13. byte[] ip=address.getAddress();
  14. for (int i=0;i< ip.length;i++) {
  15. if (i>0) System.out.print(".");
  16. System.out.print(ip[i]&0xff);
  17. }
  18. System.out.println();
  19. }
  20. }
复制代码
程序运行结果:
  1. C:\java>java nslookup sina.com
  2. 71.5.7.138

  3. C:\java>
复制代码
二、 得到某个域名的所有IP地址
  1. import java.net.*;
  2. import java.io.*;
  3. public class SimpleDNS
  4. {
  5. public static void main(String[] args)
  6. {
  7. try
  8. {
  9. InetAddress[] address =InetAddress.getAllByName("www.sina.com");
  10. for(int i=0;i< address.length;i++)
  11. {
  12. System.out.println(address[i].getHostAddress());
  13. }
  14. }
  15. catch (Exception e)
  16. {
  17. System.out.println(e.toString());
  18. System.exit(1);
  19. }
  20. }
  21. }
复制代码
运行结果
  1. C:\java>java SimpleDNS www.s
  2. 218.30.13.35
  3. 218.30.13.36
  4. 218.30.13.37
  5. 218.30.13.38
  6. 218.30.13.39
  7. 218.30.13.40
  8. 218.30.13.41
  9. 218.30.13.42
  10. 218.30.13.43
  11. 218.30.13.44
  12. 218.30.13.45
  13. 218.30.13.46
  14. 218.30.13.47
  15. 218.30.13.48
  16. 218.30.13.49
  17. 218.30.13.34
复制代码
三、 IP地址转换成10进制整数
经常要判断一个ip是国内的还是国外的,有了下面程序再结合数据库查询...
  1. public class IP
  2. {
  3. private static long ipToLong(String strIP)
  4. //将127.0.0.1 形式的IP地址转换成10进制整数,这里没有进行任何错误处理
  5. {
  6. int j=0;
  7. int i=0;
  8. long [] ip=new long[4];
  9. int position1=strIP.indexOf(".");
  10. int position2=strIP.indexOf(".",position1+1);
  11. int position3=strIP.indexOf(".",position2+1);
  12. ip[0]=Long.parseLong(strIP.substring(0,position1));
  13. ip[1]=Long.parseLong(strIP.substring(position1+1,position2));
  14. ip[2]=Long.parseLong(strIP.substring(position2+1,position3));
  15. ip[3]=Long.parseLong(strIP.substring(position3+1));
  16. return (ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];
  17. }
  18. private static String longToIP(long longIP)
  19. //将10进制整数形式转换成127.0.0.1形式的IP地址
  20. {
  21. StringBuffer sb=new StringBuffer("");
  22. sb.append(String.valueOf(longIP>>>24));//直接右移24位
  23. sb.append(".");

  24.           //将高8位置0,然后右移16位
  25. sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16));
  26. sb.append(".");
  27. sb.append(String.valueOf((longIP&0x0000FFFF)>>>8));
  28. sb.append(".");
  29. sb.append(String.valueOf(longIP&0x000000FF));
  30. sb.append(".");
  31. return sb.toString();
  32. }
  33. public static void main(String[] args)
  34. {
  35. System.out.println("IP地址的各种表现形式:\r\n");
  36. System.out.print("32位二进制形式:");
  37. System.out.println(Long.toBinaryString(3526601384L));
  38. System.out.print("十进制形式:");
  39. System.out.println(ipToLong("210.51.170.168"));
  40. System.out.print("普通形式:");
  41. System.out.println(longToIP(3526601384L));
  42. }
  43. }
复制代码
程序运行结果:
  1. IP地址的各种表现形式:

  2. 32位二进制形式:11001010011100000110000010100011
  3. 十进制形式:3396362403
  4. 普通形式:202.112.96.163.
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2