`
tokiodj
  • 浏览: 4131 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类

使用Java来实现域名和IP地址转换的操作

阅读更多
[摘要] 本文简要地介绍了Internet命名规则和地址的划分约定,然后介绍了如何利用Java语言完成符号名(上面的字符串)和IP地址(上面的数字串)之间的转换工作,并给出一个实例,检查可访问的远程主机。
  对我们普通用户而言,形象化的符号要比一捆枯燥的数字编码要好记得多。比如,我们会很容易地记住字符串“www.chinahtml.com”,却很难记住206.17.191.12。本文简要地介绍了Internet命名规则和地址的划分约定,然后介绍了如何利用Java语言完成符号名(上面的字符串)和IP地址(上面的数字串)之间的转换工作,并给出一个实例,检查可访问的远程主机。

  Internet命名规则和地址划分约定

  在Internet上,符号名(symbolic Name)用来命名主机和网络,例如www.oscar.com。这些符号名的“学名”叫做“Domain Name”,即域名。虽然域名对我们来说方便得多,但在它们用作通信标识之前,必须转换为IP地址(Internet Protocol Address)。IP地址是一个32位的标识符,包括一个网络标识和主机标识,以便唯一地标识主机和网络。域名转换为IP地址的工作是由专门的系统完成,这就是域名系统(Domain Name System??DNS)。

  同一网络或不同网络主机之间进行数据的发送/接收时,IP地址就开始起作用了。如果是同一网络中主机之间的数据传递,则仅利用IP地址中的主机标识,来确定网络中主机的所在。另一方面,如果是不同网络中主机之间的通信,则要同时利用主机标识和网络标识来确定相应的主机。定位网络和主机,再进行数据传送的过程称为路由(routing)。网络中的路由器(router)包含一个IP层 (IP Layer),它负责执行路由算法,将数据包发送到目的地。在Internet上,将数据库发送到目的地是IP层份内之事。

  IP地址是Internet注册部门??Network Information Center(网络信息中心??NIC)分配给不同的组织,各组织再下放给多个部门。IP地址要占用4个字节。

  经过路由的数据包,也有可能会在传送的过程中丢失。于是,人们就利用底层传输协议,来进行数据传送正确与否的判断。例如,TCP用于检查错误或数据丢失,并在出错时,再次发送相应的数据库,直至对方主机正确接收为止。

  目前,共计有3类(或3个级别)的IP地址:A类、B类和C类。另外,还有一类IP 地址叫作“Multicast”,在某些Internet主机上使用。这些不同类别的IP地址满足了不同组织的需要。例如,A类地址主要用于主机数目超过 65536的大型网络系统;B类地址则用于中型网络系统,其主机数大于255,却小于65536;C类地址则用于那些主机数量小于256的小型网络。

  不同类别地址的十进制表示如下,其中的十进制数代表允许的地址范围:

  A类

  网络ID 主机ID

  1~127 0~255 0~255 0~255

  B类

  网络ID 主机ID

  128~191 0~255 0~255 0~255

  C类

  网络ID 主机ID

  191~233 0~255 0~255 0~254

  Multicast

  191~233 0~255 0~255 0~254

  数字0和255另有特殊的含意。数字0是为那些地址不明的主机保留的。某些情况下,如错误的系统配置,主机标识或网络标识不明的情况也会发生。例如,某个主机的C类地址为0.0.0.42,则说明其主机标识为42,而它所处网络的网络标识则是“未知数”0。?

  数字255则用于广播发送方式,即一台主机发出的信息会传送到网络中所有的主机上。

  获得IP地址

  为了获得所在网络的IP地址,或者网络中其他主机的IP地址,我们可以用 java.net软件包中的java.net.InetAddress类加以实现。例如,如果我们希望得到所在网络的IP地址,我们可以调用 InetAddress类中的getLocalHost()和getAddress()方法。getLocalHost()返回一个 InetAddress对象;而getAddress()则返回一个长度为4的字节数组(IP地址为4个字节)。?

  如果要编制一个基于网络的应用程序,我们也许需要知道准备运行这个程序的主机的域名或IP地址。如果这个程序只在我们自己的主机上运行,而且我们也知道主机的域名或IP地址,则我们就可以这样进行:定义一个字符串常量即可,如:string localHost=“my-machine-name”。但大多情况下,我们编制

  /*

  * Program:sample1.java

  */

  import java.net.*/;

  public class GetName {

  public static void main (String argv〔〕) throws Exception {

  InetAddress host=null;

  host=InetAddress.getLocalHost();

  System.out.println(host.getHostName());

  }}

  的程序将在不同的主机上运行,这样才有实用价值。那么,象上面那样,定义一个localHost常量的方法就不太好用了。我们希望应用程序能够自动检测得到当前主机的域名。下面的程序说明了如何完成这一工作。

  InetAddress是java.net软件开发包中的一个“现成”的类。在上面的代码中,我们可以说,其中的变量host就是一个InetAddress;InetAddress.getLocalHost()返回一个 InetAddress。例如,某个主机域名为“sample”,其IP地址为“128.118.2.10”,那么, InetAddress.getLocalHost()调用返回后,变量host的值就成了“sample/128.118.2.10”。如果只对其中的主机域名感兴趣,则可以调用getHostname()。

  简单地说,IP地址是4个数字。为了得到数字形式的IP地址,我们可以将上面程序稍作改动。

  /*

  * Program:sample2.java

  */

  import java.net.*;

  public class GetAddress {

  public static void main (String argv〔〕) throws Exception {

  InetAddress host=null;

  host=InetAddress.getLocalHost();

  byte ip〔〕=host.getAddress();

  for (int i=0;iif (i>0 System.out.print(".");

  System.out.print(ip〔i〕& 0xff);

  }

  System.out.println();

  }}

  getAddress()返回一个长度为4的字节数组。例如,如果IP地址为“128.118.2.10”,则上面程序中的变量ip的最后内容为:

  ip〔0〕=128ip〔1〕=118ip〔2〕=2ip〔3〕=10

  Internet上的所有计算机都拥有一个唯一的IP地址和主机名。既然如此,我们要这些地址有什么用呢?这些地址可以帮助我们定位Internet上的固定资源,也可以使路由工作顺利地进行。

  熟知UNIX的人都知道,UNIX系统中有一个复杂的DNS客户程序?? nslookup工具。利用nslookup,我们可以根据已知的IP地址,找到相应的主机名;也可以根据主机名,找到相应的IP地址。它可算是一个非常有用的工具。下面的示例程序则可以让我们找到Internet上所有可以访问主机的IP地址。

  /*

  * Program:nslookup.java

  */

  import java.net.*/;

  public class nslookup {

  //Usage:java nslookup hostname

  public static void main (String argv〔〕) throws Exception {

  String host=argv〔0〕;

  InetAddress address=null;

  try {

  address=InetAddress.getByName(host);

  } catch(UnknownHostException e) {

  System.out.println("Unknown host");

  System.exit(0);

  }

  byte〔〕 ip〔〕=address.getAddress();

  for (int i=0;iif (i>0 System.out.print(".");

  System.out.print(ip〔i〕& Oxff);

  }

  System.out.println();

  }}

  在JDK 1.0.2(Java Develop Kit-Java开发工具包中,编制一个程序,将主机名转换为IP地址并不太容易。这是由于InetAddress类中getHostName方法中有一个bug。这个bug在JDK 1.1 beta版中得以修正,所以下列代码在JDK 1.1中应该可以运行。
分享到:
评论
2 楼 zyy571137 2010-12-07  
正需要这个o(∩_∩)o...
1 楼 zyy571137 2010-12-07  
  

相关推荐

    使用Java实现DNS域名解析的简单示例

    在Java编程中,DNS(Domain Name System)域名解析是将人类可读的域名转换成IP地址的过程。这个过程可以通过Java的内置类`InetAddress`来实现。以下是一个使用Java进行DNS域名解析的简单示例: ```java import java...

    java中用正则表达式检测IP地址是否合理

    本文将详细介绍如何使用Java中的正则表达式来检查一个IP地址的有效性。 #### 1. 正则表达式简介 正则表达式是一种强大的文本处理工具,它可以通过单一的字符串来描述一组字符串,并能够快速地进行匹配、查找或替换...

    java 获取 IP 地址

    总结来说,这个小而精悍的Java程序利用了`InetAddress`类进行域名到IP地址的转换,并通过GUI提供用户交互。虽然界面简陋,但其功能实用,对于初学者理解网络编程和Java GUI设计具有一定的教学价值。

    用Java编程获得本机和服务器IP地址

    总的来说,通过Java的`InetAddress`类,我们可以方便地获取本地主机和远程服务器的IP地址,这对于构建网络应用程序至关重要。不过,实际开发中还应考虑异常处理、性能优化以及网络环境的多样性等因素。

    通过IP地址获得域名和主机名

    总的来说,Java的`InetAddress`类提供了强大的工具,允许开发者通过IP地址获取域名和主机名,从而实现网络通信中的重要功能。理解并熟练运用这些方法是成为一名合格的Java网络编程者的基础。在实际项目中,还需要...

    Java实现IPV6地址查询

    总之,Java实现IPv6地址查询是一项涉及网络编程、数据库操作和特定库使用的任务。通过理解IPv6地址的结构,掌握ZX公网IPv6库的API,并熟练运用Java面向对象编程,可以构建出高效、可靠的查询系统。

    多级程域名转换为IP或者IP转域名

    而域名则是为了方便人们记忆,将IP地址转换成易于理解的文字形式,比如www.example.com。这个转换过程是由DNS(Domain Name System)系统完成的。 多级程域名转换,意味着程序可以同时处理多个域名解析请求,提高了...

    Java中的IP地址和InetAddress类使用详解

    InetAddress类在java.net包中,它是Java提供用来处理IP地址和域名的工具类。通过InetAddress,我们可以获取域名对应的IP地址,或者根据IP地址获取其对应的域名。具体方法包括: 1. `getByName(String s)`:此方法...

    net.java.tar.gz_JAVA 域名

    了解了基本的域名与IP地址操作后,我们可以实现两种上网方式:通过域名和通过IP地址。 1. **通过域名上网**:这通常涉及到浏览器或其他应用程序发起HTTP或HTTPS请求。在Java中,可以使用`java.net.URL`类来构造URL...

    用Java实现对IP/TCP协议数据包的拦截和分析

    本文将深入探讨如何利用Java编程语言实现对IP和TCP协议数据包的拦截与分析,以便获取IP地址的详细信息。 首先,我们需要理解IP(Internet Protocol)和TCP(Transmission Control Protocol)的基本概念。IP协议负责...

    java ip 地址分析

    5. IP地址转换:Java提供了一些方法将IP地址转换为字节数组,反之亦然。例如,`InetAddress`的`getAddress()`方法返回一个字节数组,而`InetAddress.getByAddress(byte[] addr)`可以根据字节数组创建`InetAddress`...

    Java开发源代码获得特定网站的IP地址.rar

    Java提供了`java.net.InetAddress`类,该类用于处理IP地址和主机名。要获取特定网站的IP地址,我们可以使用`InetAddress`的`getByName`方法,传入相应的域名作为参数。以下是一个简单的示例代码: ```java import ...

    java 获取网址的IP地址

    在Java编程中,获取网址的IP地址是一项常见的网络操作,主要应用于网络通信或者网络请求的底层处理。这个过程涉及到DNS(Domain Name System)解析,即从一个URL(Uniform Resource Locator)转换为对应的IP地址。...

    android将域名转成Ip的demo

    在Android开发中,有时我们需要将一个域名转换为对应的IP地址,以便进行网络通信。这是因为互联网上的服务器可能通过IP地址提供服务,而不是直接使用域名。在某些情况下,IP地址可能会发生变化,例如在负载均衡或者...

    域名转IP(InetAddress)

    这个类提供了将域名转换为IP地址,以及将IP地址转换为域名的功能。下面我们将深入探讨`InetAddress`类的使用方法及其相关知识点。 首先,我们需要理解域名和IP地址的概念。域名是人类可读的网站标识,如"example....

    域名判断,用于检测域名是否正确

    1. **Java的InetAddress类**:可以尝试将字符串转换为IP地址,如果转换成功则说明该字符串是一个有效的域名。例如: ```java try { InetAddress.getByName("example.com"); } catch (UnknownHostException e) { ...

    多线程处理+IP地址和计算机名相互转化(源码)

    此外,DNS(域名系统)服务则负责将域名转换为IP地址,反之亦然。 源码中可能包含的实现方式可能包括: 1. 多线程处理部分:创建多个线程,每个线程负责一个IP到计算机名或者计算机名到IP的转化任务,通过回调函数...

    java地址解析和反向地址解析

    Java地址解析和反向地址解析是网络编程中的关键概念,主要涉及到网络通信中IP地址与域名之间的转换。本文将深入探讨这两个主题,并提供相关的实践应用示例。 **一、地址解析** 地址解析,通常指的是DNS(Domain ...

    IP地址转换与网卡信息

    总的来说,了解IP地址转换、DNS工作原理、如何使用Ping命令以及相关编程类的使用,是每个IT从业者必备的技能。这些基础知识不仅能够帮助我们更好地理解和解决问题,也是构建高效网络应用的关键。在日常工作中,结合...

    ip地址转城市

    而将IP地址转换为具体的城市信息,则涉及到IP数据库和地理定位服务。 IP地址分为公有IP(Public IP)和私有IP(Private IP)。公有IP是全球唯一的,由Internet Assigned Numbers Authority (IANA) 分配,用于互联网...

Global site tag (gtag.js) - Google Analytics