001: /* InetAddressUtil
002: *
003: * Created on Nov 19, 2004
004: *
005: * Copyright (C) 2004 Internet Archive.
006: *
007: * This file is part of the Heritrix web crawler (crawler.archive.org).
008: *
009: * Heritrix is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU Lesser Public License as published by
011: * the Free Software Foundation; either version 2.1 of the License, or
012: * any later version.
013: *
014: * Heritrix is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
017: * GNU Lesser Public License for more details.
018: *
019: * You should have received a copy of the GNU Lesser Public License
020: * along with Heritrix; if not, write to the Free Software
021: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
022: */
023: package org.archive.util;
024:
025: import java.net.InetAddress;
026: import java.net.NetworkInterface;
027: import java.net.SocketException;
028: import java.net.UnknownHostException;
029: import java.util.ArrayList;
030: import java.util.Enumeration;
031: import java.util.List;
032: import java.util.logging.Logger;
033: import java.util.regex.Matcher;
034: import java.util.regex.Pattern;
035:
036: /**
037: * InetAddress utility.
038: * @author stack
039: * @version $Date: 2006-09-20 22:40:21 +0000 (Wed, 20 Sep 2006) $, $Revision: 4644 $
040: */
041: public class InetAddressUtil {
042: private static Logger logger = Logger
043: .getLogger(InetAddressUtil.class.getName());
044:
045: /**
046: * ipv4 address.
047: */
048: public static Pattern IPV4_QUADS = Pattern
049: .compile("([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})");
050:
051: private InetAddressUtil() {
052: super ();
053: }
054:
055: /**
056: * Returns InetAddress for passed <code>host</code> IF its in
057: * IPV4 quads format (e.g. 128.128.128.128).
058: * <p>TODO: Move to an AddressParsingUtil class.
059: * @param host Host name to examine.
060: * @return InetAddress IF the passed name was an IP address, else null.
061: */
062: public static InetAddress getIPHostAddress(String host) {
063: InetAddress result = null;
064: Matcher matcher = IPV4_QUADS.matcher(host);
065: if (matcher == null || !matcher.matches()) {
066: return result;
067: }
068: try {
069: // Doing an Inet.getByAddress() avoids a lookup.
070: result = InetAddress
071: .getByAddress(host, new byte[] {
072: (byte) (new Integer(matcher.group(1))
073: .intValue()),
074: (byte) (new Integer(matcher.group(2))
075: .intValue()),
076: (byte) (new Integer(matcher.group(3))
077: .intValue()),
078: (byte) (new Integer(matcher.group(4))
079: .intValue()) });
080: } catch (NumberFormatException e) {
081: logger.warning(e.getMessage());
082: } catch (UnknownHostException e) {
083: logger.warning(e.getMessage());
084: }
085: return result;
086: }
087:
088: /**
089: * @return All known local names for this host or null if none found.
090: */
091: public static List<String> getAllLocalHostNames() {
092: List<String> localNames = new ArrayList<String>();
093: Enumeration e = null;
094: try {
095: e = NetworkInterface.getNetworkInterfaces();
096: } catch (SocketException exception) {
097: throw new RuntimeException(exception);
098: }
099: for (; e.hasMoreElements();) {
100: for (Enumeration ee = ((NetworkInterface) e.nextElement())
101: .getInetAddresses(); ee.hasMoreElements();) {
102: InetAddress ia = (InetAddress) ee.nextElement();
103: if (ia != null) {
104: if (ia.getHostName() != null) {
105: localNames.add(ia.getHostName());
106: }
107: if (ia.getHostAddress() != null) {
108: localNames.add(ia.getHostAddress());
109: }
110: }
111: }
112: }
113: final String localhost = "localhost";
114: if (!localNames.contains(localhost)) {
115: localNames.add(localhost);
116: }
117: final String localhostLocaldomain = "localhost.localdomain";
118: if (!localNames.contains(localhostLocaldomain)) {
119: localNames.add(localhostLocaldomain);
120: }
121: return localNames;
122: }
123: }
|