Requisitos: Dada una dirección de URL, por ejemplo: http://www.cncounter.com/tools/shorturl.php, analice la dirección IP y el número de puerto correspondientes.
Nota: Este artículo no implica el protocolo DNS subyacente, pero utiliza directamente la API proporcionada por la plataforma Java para operar.
DNS también es un servicio de nombre de dominio, que es el servicio de nombre de dominio.
Sabemos que las clases relacionadas con las URL en Java incluyen java.net.url y java.net.uri, etc., donde URI es un localizador de recursos y puede incluir protocolos como el archivo:
Así que aquí usamos la clase URL y el código para obtener el número de puerto es el siguiente:
/ ** * Obtenga el número de puerto * * @param href url, ftp, http, nntp, ... etc. * @return * @throws ioexception */ public static int parseport (string href) lanza ioexception {// url url = nueva url (href); // número de puerto; Si no se especifica explícitamente en href, es -1 int port = url.getport (); if (puerto <0) {// Obtenga el número de puerto predeterminado del puerto de protocolo correspondiente = url.getDefaultPort (); } puerto de retorno; }La clase URL es una clase que existió en Java en los primeros días. La lógica interna es bastante compleja. Si está interesado, puede ver el código de implementación JDK relevante por sí mismo.
Hay 2 formas de obtener el número de puerto:
getPort () es para obtener el número de puerto especificado en la URL. Si no se especifica, devuelve -1.
getDefaultport () debe obtener el número de puerto predeterminado correspondiente al protocolo, como el número de puerto predeterminado del protocolo HTTP es 80, el número de puerto predeterminado del protocolo HTTPS es 443, etc.
Luego miramos el código que extrae la parte del host:
/ ** * Obtenga la parte del host * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioexception */ public static string parsehost (string href) lanza ioexception {// url = nueva url (href); // Obtener la parte del host String host = url.gethost (); Host de regreso; }En esencia, también puede interceptar directamente el host a través de expresiones o cadenas regulares, pero si encuentra situaciones complejas, no es fácil de manejar, por ejemplo: URL complejas como https: // YourName: [email protected]/mumu-osc/nicefish.git.
Después de extraer el nombre de dominio, puede buscar la dirección IP a través de la clase java.net.inetaddress.
El código se ve así:
/ ** * Resolver la dirección IP según el nombre de dominio (host) * @param Nombre de dominio de host * @return * @throws ioexception */ public static string parseip (string host) lanza ioexception {// encontrar la dirección IP basada en el nombre de dominio inetaddress ineTdress = inetaddress.getByName (host); // Dirección de dirección IP Dirección = inetaddress.gethostaddress (); dirección del remitente; }Como puede ver, utilizamos el método estático inetaddress.getByName () para encontrar la IP.
Esta clase también proporciona otros métodos estáticos, pero generalmente no se usa mucho. Si está interesado, puede hacer clic en el código fuente abierto para echar un vistazo.
Luego, realizamos una prueba simple a través del método Main ():
public static void main (string [] args) lanza ioexception {// string href = "http://www.cncounter.com/tools/shorturl.php"; // número de puerto int port = parseport (href); // String de nombre de dominio host = parsehost (href); // Dirección de dirección IP Dirección = parseip (host); // system.out.println ("host =" + host); System.out.println ("puerto =" + puerto); System.out.println ("dirección =" + dirección); }El resultado de la ejecución es:
host = www.cncounter.comport = 80Address = 198.11.179.83
Conociendo la IP y el número de puerto, podemos conectarnos directamente a través de Socket.
Por supuesto, si es el protocolo HTTP, puede usar la herramienta HTTPClient de Apache, que es potente y fácil de usar. Pero una de las desventajas de esta biblioteca es que las versiones no son compatibles, y la API a menudo cambia, y debe procesarse de acuerdo con el número de versión específico al programar.
El código completo se ve así:
import java.io.ioException; import java.net.*;/***Encuentre la dirección IP*/public class testFinddns {public static void main (string [] args) lanza ioexception {// string href = "http://www.cncounter.com/tools/shorturl.php"; // número de puerto int port = parseport (href); // String de nombre de dominio host = parsehost (href); // Dirección de dirección IP Dirección = parseip (host); // system.out.println ("host =" + host); System.out.println ("puerto =" + puerto); System.out.println ("dirección =" + dirección); } / ** * Obtenga el número de puerto * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioexception * / public static int parseport (string href) lanza ioexception {// url = nueva url (href); // número de puerto; Si no se especifica explícitamente en href, es -1 int port = url.getport (); if (puerto <0) {// Obtenga el número de puerto predeterminado del puerto de protocolo correspondiente = url.getDefaultPort (); } puerto de retorno; } / ** * Obtenga la parte del host * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioexception * / public static string parsehost (string href) lanza ioexception {// url = new url (href); // Obtener la parte del host String host = url.gethost (); Host de regreso; } / ** * Resolver la dirección IP basada en el nombre de dominio (host) * * @param Nombre de dominio de host * @return * @throws ioexception * / public static string parseip (string host) lanza ioexception {// Encuentra la dirección IP basada en el nombre de dominio inetaddress.getallbyname (host); Inetaddress inetaddress = inetaddress.getByName (host); // Dirección de dirección IP Dirección = inetaddress.gethostaddress (); dirección del remitente; }}Ok, realice el embalaje y el procesamiento apropiados de acuerdo con la situación específica.
Resumir
Lo anterior es el método Java introducido por el editor para consultar direcciones DNS/IP basadas en la URL. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!