Obtener lista de directorios a través de http

Hay un directorio que se sirve a través de la red que estoy interesado en el seguimiento. Sus contenidos son varias las versiones de software que estoy usando y me gustaría escribir un script que me podría ejecutar la cual se verifica lo que hay, y las descargas de algo que es más que lo que ya tengo.

Hay una manera, digamos con wget o algo, para obtener un listado de un directorio. He intentado usar wget en el directorio, lo que me da html. Para evitar tener que analizar el documento html, hay una manera de recuperar una lista simple como ls daría?

OriginalEl autor ajwood | 2010-12-21

5 respuestas

  1. 22

    Me di cuenta de una manera de hacerlo:

    $ wget --spider -r --no-parent http://some.served.dir.ca/
    

    Es bastante detallado, por lo que debe canalizar a través de grep un par de veces en función de lo que buscas, pero la información es todo lo que hay. Parece que imprime a stderr, para anexar 2>&1 dejar grep. Yo grepped para “\.tar\.gz” para encontrar todos los archivos tar el sitio tiene para ofrecer.

    Nota que wget escribe los archivos temporales en el directorio de trabajo, y no se limpia sus directorios temporales. Si esto es un problema, usted puede cambiar a un directorio temporal:

    $ (cd /tmp && wget --spider -r --no-parent http://some.served.dir.ca/)
    
    Está usted seguro de eso? El --spider opción hace que esta realidad no descargar nada
    Traté de wget --spider -r --no-parent https://www.kernel.org/pub/software/scm/git/ y comenzó a crear una estructura de directorios anidados en el disco – esto no va a funcionar. No quiero nada escrito en el disco, incluso si se trata de un único directorio.
    Oh, sí, parece wget necesita escribir los archivos intermedios. Limpia los archivos, pero las hojas del árbol de directorios.. Podría usted acaba de cd en /tmp mientras se ejecuta? (cd /tmp && wget --spider -r --no-parent https://www.kernel.org/pub/software/scm/git/)

    OriginalEl autor ajwood

  2. 2

    Los siguientes no es recursivo, pero a mí me funcionó:

    $ curl -s https://www.kernel.org/pub/software/scm/git/
    

    El resultado es HTML y está escrito para stdout. A diferencia de wget, no hay nada escrito en el disco.

    -s (--silent) es pertinente cuando la tubería de la salida, especialmente dentro de un guión que no debe ser ruidoso.

    Siempre que sea posible, recuerde que no debe utilizar ftp o http en lugar de https.

    He añadido -k como una opción para omitir la comprobación de certificados https para mi aplicación

    OriginalEl autor A-B-B

  3. 1

    Si es servido por http, entonces no hay manera de conseguir un simple listado de directorio. El listado puede ver cuando usted navega por allí, que es el wget está recuperando, es generado por el servidor web como una página HTML. Todo lo que puedes hacer es analizar esa página y extraer la información.

    OriginalEl autor Optimal Cynic

  4. 1

    Lo que usted está pidiendo que se sirve mejor a través de FTP, HTTP.

    HTTP no tiene ningún concepto de los listados de directorios, FTP.

    La mayoría de los servidores HTTP no permitir el acceso a los listados de los directorios, y los que sí lo hacen como una característica del servidor, no del protocolo HTTP. Para aquellos servidores HTTP, deciden generar y enviar una página HTML para consumo humano, no el consumo de máquina. Usted no tiene ningún control sobre, y no tienen más remedio que analizar el código HTML.

    FTP está diseñado para la máquina de consumo, más aún con la introducción de la MLST y MLSD comandos que reemplazar la ambigüedad de la LIST comando.

    En realidad, HTTP no tienen este concepto, se llama WebDAV, y es una extensión opcional. Consulte RFC 4918.
    WebDAV se ejecuta en la parte superior de HTTP, pero no es parte de HTTP a sí mismo. Como HTTP ejecuta en la parte superior de TCP, pero no es parte de TCP en sí. Usted no puede utilizar WebDAV para hablar a cualquier servidor HTTP. Tiene que ser implementado y habilitado por cada servidor. Como usted dijo, es opcional.
    Es opcional, pero el resto de su comparación es engañosa. TCP y HTTP son diferentes capas de red, mientras que PROPFIND y OBTENER están exactamente en la misma capa.

    OriginalEl autor Remy Lebeau

  5. 0

    AFAIK, no hay manera de obtener una lista de directorios como que para fines de seguridad. Es más bien la suerte de que su directorio de destino tiene el código HTML del listado porque no le permiten analizar y descubrir nuevas descargas.

    La razón por la que se sirve la página, en primer lugar, es proporcionar a los usuarios con una fuente para el software. Si está destinado a ser visto en un navegador, sólo parece razonable que uno puede esperar para acceder a ella desde una secuencia de comandos.
    Si hubo un index.html o una página similar, tendría sentido de no permitir el listado de directorios por razones de seguridad. Parece extraño para mí que si un directorio es que se sirve cruda (bien, después de haber html generado para hacer bonito) debe ser totalmente accesible para algo tan inofensivo como un listado de directorio.

    OriginalEl autor Samuel

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *