
Filtra e deduplica grandes listas de URLs removendo extensões estáticas, palavras-chave indesejadas, IDs, variantes de idioma e parâmetros, produzindo conjuntos de endpoints limpos para reconhecimento web.
Esta é uma ferramenta usada para limpar uma lista de URLs. Como ponto de partida, usei a incrível ferramenta uro de Somdev Sangwan. Mas queria mudar algumas coisas, fazer algumas melhorias (como lidar com GUIDs) e torná-la mais personalizável.
urless suporta Python 3.
Instale o urless no ambiente python padrão (global).
pip install urless
OU
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
Você pode atualizar com
pip install --upgrade urless
Configuração rápida em ambiente python isolado usando pipx
pipx install git+https://github.com/xnl-h4ck3r/urless.git
Basicamente, você passa uma lista de URLs (de um arquivo ou canalizada do STDIN) e recebe um arquivo ou URLs limpas. Mas de que forma elas são limpas? Explicarei isso abaixo, mas primeiro aqui estão alguns termos que serão usados:
-fe, especificadas com FILTER_EXTENSIONS no config.yml, ou, se nenhuma delas existir, uma lista padrão de .css,.ico,.jpg,.jpeg,.png,.bmp,.svg,.img,.gif,.mp4,.flv,.ogv,.webm,.webp,.mov,.mp3,.m4a,.m4p,.scss,.tif,.tiff,.ttf,.otf,.woff,.woff2,.bmp,.ico,.eot,.htc,.rtf,.swf,.image.-fk, especificadas com FILTER_KEYWORDS no config.yml, ou, se nenhuma delas existir, uma lista padrão de blog,article,news,bootstrap,jquery,captcha,node_modulesLANGUAGE no config.yml, ou, se não existir, uma lista padrão dos códigos mais comuns en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.koAqui está o que acontece:
-dp/--disregard-params foi passado:
REMOVE_PARAMS (ou substituídos pelo argumento -rp/--remove-params), eles serão removidos de todas as URLs antes do processamento.-rcid/--regex-custom-id for passado e o caminho da URL contiver um ID Personalizado, apenas uma correspondência com o regex do ID Personalizado será incluída se houver múltiplas URLs em que essa é a única diferença.-lang for passado e a URL contiver um código de idioma (ex.: ), apenas um dos códigos de idioma será incluído se houver múltiplas URLs em que o código de idioma é diferente.cat target_urls.txt | urless
ou
urless -i target_urls.txt
cat target_urls.txt | urless > output.txt
ou
urless -i target_urls.txt -o output.txt
O arquivo config.yml tem as chaves que podem ser atualizadas para atender às suas necessidades:
FILTER_KEYWORDS - Uma lista separada por vírgulas de palavras-chave (ex.: blog,article,news etc.) contra as quais as URLs são verificadas em certas circunstâncias.FILTER_EXTENSIONS - Uma lista separada por vírgulas de extensões de arquivo (ex.: .css,.jpg,.jpeg etc.) contra as quais todas as URLs são verificadas. Se uma URL incluir qualquer uma das strings, ela será excluída da saída.LANGUAGE - Uma lista separada por vírgulas de códigos de idioma (ex.: en-gb,fr,nl etc.) contra os quais todas as URLs são verificadas quando o argumento -lang é passado. Se houver múltiplas URLs com diferentes códigos de idioma, apenas uma versão da URL será emitida.REMOVE_PARAMS - Uma lista separada por vírgulas de nomes de parâmetros sensíveis a maiúsculas e minúsculas (ex.: cachebuster,cacheBuster) que serão removidos de todas as URLs antes do processamento.Atualmente, há verificações automáticas de regex para uma parte do caminho ser um Identificador Global Único (GUID) e um ID Inteiro, mas o argumento -rcid / --regex-custom-id permite que você forneça uma expressão regular para identificar um ID personalizado. Por exemplo, se um alvo tiver um formato de ID específico (que não seja um GUID ou Inteiro), você pode especificar uma expressão regex para ele, e então apenas um deles será retornado na saída se o restante da URL for o mesmo. Por exemplo:
U-65241Xhttps://target.com/blah/U-61723A/settings
https://target.com/blah/U-63352B/settings
https://target.com/blah/U-61351A/profile
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
urless e passar -rcid 'U-[0-9]{5}[A-Z]', então a saída seria:
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
NOTAS IMPORTANTES SOBRE REGEX:
-rcid.[^(\?|\/|#|$)]* ao final do seu regex, o que significará TODOS os outros caracteres até o final da parte do caminho.^ no início e $ no final do seu regex para garantir que ele represente toda a parte de um caminho entre barras. No entanto, eles serão adicionados para você se forem omitidos.cat input.txt | grep -E 'U-[0-9]{5}[A-Z]', por exemplo, e ver se sua expressão parece correta (ela deve destacar apenas o que lhe interessa e destacar toda a parte do caminho que é o ID personalizado).https://target.com/blah/xnl/settings onde é um Nome de Usuário, você não conseguirá criar um regex para nome de usuário porque não é um formato único o suficiente para distingui-lo de outros valores possíveis de caminho.Se você encontrar qualquer problema, ou tiver ideias para melhorias, sinta-se à vontade para abrir uma issue no Github. Se houver um problema, será útil se você puder fornecer o comando exato que executou e uma descrição detalhada do problema. Se possível, execute com -v para reproduzir o problema e me informe sobre quaisquer mensagens de erro que forem exibidas.
Nenhum - sinta-se à vontade para abrir uma issue no Github para sugerir quaisquer melhorias.
Boa sorte e boas caçadas! Se você realmente ama a ferramenta (ou qualquer outra), ou elas ajudaram você a encontrar uma recompensa incrível, considere ME PAGAR UM CAFÉ! ☕ (Eu poderia usar a cafeína!)
🤘 /XNL-h4ck3r
| Argumento | Argumento Longo | Descrição |
|---|
| -i | --input | Um arquivo de URLs para limpar. |
| -o | --output | O arquivo de saída que conterá a lista de URLs limpas (padrão: output.txt). Se for canalizado para outro programa, a saída será gravada no STDOUT. |
| -fk | --filter-keywords | Uma lista separada por vírgulas de palavras-chave para excluir links (se não houver parâmetros). Isso substituirá a lista FILTER_KEYWORDS especificada no config.yml |
| -fe | --filter-extensions | Uma lista separada por vírgulas de extensões de arquivo para excluir. Isso substituirá a lista FILTER_EXTENSIONS especificada no config.yml |
| -rp | --remove-params | Uma lista separada por vírgulas de parâmetros sensíveis a maiúsculas e minúsculas para remover de TODAS as URLs. Isso substituirá a lista REMOVE_PARAMS especificada no config.yml. Isso pode ser útil para remover parâmetros de cache buster, por exemplo.** |
| -ks | --keep-slash | Uma barra final no final de uma URL na entrada não será removida. Portanto, pode haver URLs idênticas na saída, uma com e outra sem barra final. |
| -khw | --keep-human-written | Por padrão, qualquer URL com uma parte do caminho que contenha mais de 3 hífens (-) é removida, pois presume-se que seja conteúdo escrito por humanos (ex.: post de blog) e não interessante. Passar este argumento as manterá na saída. |
| -kym | --keep-yyyymm | Por padrão, qualquer URL com um caminho contendo /YYYY/MM (onde YYYY é um ano e MM um mês) é removida, pois presume-se que seja conteúdo de blog/notícias e não interessante. Passar este argumento as manterá na saída. |
| -rcid | --regex-custom-id | USE COM CUIDADO! Regex para um ID Personalizado que seu alvo usa. Certifique-se de que o valor seja passado entre aspas. Veja a seção abaixo para mais detalhes sobre isso. |
| -iq | --ignore-querystring | Remove a query string (incluindo fragmentos de URL #) para que a saída contenha apenas caminhos únicos. |
| -fnp | --fragment-not-param | Não trate fragmentos de URL # da mesma forma que parâmetros, ex.: se um link tiver uma palavra-chave de filtro e um fragmento (ou parâmetro), o link geralmente é mantido, mas se este argumento for passado e um link tiver uma palavra de filtro e um fragmento, o link será removido. Além disso, se este argumento for passado e -iq / --ignore-querystring for usado, o fragmento NÃO será removido dos links se não houver query string no link. |
| -lang | --language | Se passado e houver múltiplas URLs com diferentes códigos de idioma como parte do caminho, apenas uma versão da URL será emitida. Os códigos são especificados na seção LANGUAGE do config.yml. |
| -c | --config | Caminho para o arquivo de configuração YML. Se não for passado, ele procura o arquivo config.yml no diretório de configuração padrão, ex.: ~/.config/urless/. |
| -dp | --disregard-params | Há certa filtragem que não é feita se as URLs tiverem parâmetros, porque por padrão queremos ver todos os parâmetros possíveis. Se este argumento for passado, a filtragem será feita, independentemente da existência de quaisquer parâmetros. |
| -nb | --no-banner | Oculta a saída do banner da ferramenta (ele é ocultado por padrão se você canalizar a entrada para o urless). |
| --version | Mostra o número da versão atual. | |
| -v | --verbose | Saída detalhada (verbose) |
-), MAS não é um GUID. Isso implica conteúdo escrito por humanos, ex.: how-to-hack-the-planet. Se o argumento -khw for passado, isso não será removido./YYYY/MM/, ex.: um ano, mês. Isso geralmente é conteúdo estático, como um blog. Se o argumento -kym for passado, isso não será removido.en-gb#) E o argumento -dp/--disregard-params NÃO foi passado:
xnl