    1   /* DNSJavaUtil
    2    *
    3    * Created on Oct 8, 2004
    4    *
    5    * Copyright (C) 2004 Internet Archive.
    6    *
    7    * This file is part of the Heritrix web crawler (crawler.archive.org).
    8    *
    9    * Heritrix is free software; you can redistribute it and/or modify
    10   * it under the terms of the GNU Lesser Public License as published by
    11   * the Free Software Foundation; either version 2.1 of the License, or
    12   * any later version.
    13   *
    14   * Heritrix is distributed in the hope that it will be useful,
    15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    17   * GNU Lesser Public License for more details.
    18   *
    19   * You should have received a copy of the GNU Lesser Public License
    20   * along with Heritrix; if not, write to the Free Software
    21   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    22   */
    23  package org.archive.util;
    24
    25  import java.net.InetAddress;
    26
    27  import org.xbill.DNS.ARecord;
    28  import org.xbill.DNS.DClass;
    29  import org.xbill.DNS.Record;
    30  import org.xbill.DNS.TextParseException;
    31  import org.xbill.DNS.Type;
    32  import org.xbill.DNS.Lookup;;
    33
    34  /***
    35   * Utility methods based on DNSJava.
    36   * Use these utilities to avoid having to use the native InetAddress lookup.
    37   * @author stack
    38   * @version $Date: 2007-01-06 05:17:35 +0000 (Sat, 06 Jan 2007) $, $Revision: 4837 $
    39   */
    40  public class DNSJavaUtil {
    41      private DNSJavaUtil() {
    42          super();
    43      }
    44
    45      /***
    46       * Return an InetAddress for passed <code>host</code>.
    47       *
    48       * If passed host is an IPv4 address, we'll not do a DNSJava
    49       * lookup.
    50       *
    51       * @param host Host to lookup in dnsjava.
    52       * @return A host address or null if not found.
    53       */
    54      public static InetAddress getHostAddress(String host) {
    55          InetAddress hostAddress = InetAddressUtil.getIPHostAddress(host);
    56          if (hostAddress != null) {
    57              return hostAddress;
    58          }
    59
    60          // Ask dnsjava for the inetaddress.  Should be in its cache.
    61          Record[] rrecordSet;
    62          try {
    63              rrecordSet = (new Lookup(host, Type.A, DClass.IN)).run();
    64          } catch (TextParseException e) {
    65              rrecordSet = null;
    66          }
    67          if (rrecordSet != null) {
    68              // Get TTL and IP info from the first A record (there may be
    69              // multiple, e.g. www.washington.edu).
    70              for (int i = 0; i < rrecordSet.length; i++) {
    71                  if (rrecordSet[i].getType() != Type.A) {
    72                      continue;
    73                  }
    74                  hostAddress = ((ARecord)rrecordSet[i]).getAddress();
    75                  break;
    76              }
    77          }
    78          return hostAddress;
    79      }
    80  }