这是一个用于清理(de-clutter)URL 列表的工具。 作为起点,我采用了 Somdev Sangwan 开发的出色工具 uro。但我想做一些改动、进行一些改进(比如处理 GUID),并让它更具可定制性。
urless 支持 Python 3。
在默认(全局)Python 环境中安装 urless。
pip install urless
或者
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
你可以通过以下命令升级:
pip install --upgrade urless
使用 pipx 在隔离的 Python 环境中快速安装
pipx install git+https://github.com/xnl-h4ck3r/urless.git
你基本上传入一个 URL 列表(来自文件,或通过 STDIN 管道输入),然后得到一个清理后的文件或 URL 列表。但它们是按什么方式被清理的呢? 下面我会解释这一点,但首先介绍一些将要使用的术语:
-fe 传递的扩展名列表,在 config.yml 中通过 FILTER_EXTENSIONS 指定;如果两者都不存在,则使用默认列表 .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 传递的关键字列表,在 config.yml 中通过 FILTER_KEYWORDS 指定;如果两者都不存在,则使用默认列表 blog,article,news,bootstrap,jquery,captcha,node_modules。config.yml 中通过 LANGUAGE 指定的语言代码列表;如果不存在,则使用最常见代码的默认列表 en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.ko。以下是处理过程:
-dp/--disregard-params 参数:
REMOVE_PARAMS 中指定的不需要的参数(或用 -rp/--remove-params 参数覆盖),它们将在处理前从所有 URL 中移除。-rcid/--regex-custom-id 且 URL 路径包含自定义 ID,当存在多个仅此 ID 不同的 URL 时,将只包含一个匹配自定义 ID 正则表达式的 URL。-lang 参数且 URL 包含语言代码(例如 en-gb),当存在多个语言代码不同的 URL 时,将只包含其中一个语言代码。#)且未传 -dp/ 参数:
cat target_urls.txt | urless
或者
urless -i target_urls.txt
cat target_urls.txt | urless > output.txt
或者
urless -i target_urls.txt -o output.txt
config.yml 文件包含以下键,你可以根据自己的需要进行更新:
FILTER_KEYWORDS - 以逗号分隔的关键字列表(例如 blog,article,news 等),在某些情况下会用它们检查 URL。FILTER_EXTENSIONS - 以逗号分隔的文件扩展名列表(例如 .css,.jpg,.jpeg 等),所有 URL 都会用它们进行检查。如果 URL 包含其中任何字符串,则将从输出中排除。LANGUAGE - 以逗号分隔的语言代码列表(例如 en-gb,fr,nl 等),当传 -lang 参数时,所有 URL 都会用它们进行检查。如果存在多个具有不同语言代码的 URL,则只会输出一个版本的 URL。REMOVE_PARAMS - 以逗号分隔的区分大小写参数名称列表(例如 cachebuster,cacheBuster),它们将在处理前从所有 URL 中移除。目前已有自动正则检查,用于判断路径部分是否为全局唯一 ID(GUID)或整数 ID,但 -rcid / --regex-custom-id 参数允许你提供正则表达式来识别自定义 ID。例如,如果目标有特定的 ID 格式(不是 GUID 或整数),你可以为其指定正则表达式;当 URL 的其余部分相同时,输出中将只返回其中一个。例如:
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 并传 -rcid 'U-[0-9]{5}[A-Z]',那么输出将是:
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
重要正则说明:
-rcid 参数时,请始终用单引号将其括起来。[^(\?|\/|#|$)]*,这将匹配直到该路径部分末尾的所有其他字符。^,在末尾添加 $,以确保它表示斜杠之间路径的整个部分。不过,如果省略它们,系统会自动为你添加。cat input.txt | grep -E 'U-[0-9]{5}[A-Z]' 之类的命令,看看你的表达式是否正确(它应该只突出你感兴趣的内容,并突出作为自定义 ID 的路径的整个部分)。https://target.com/blah/xnl/settings 这样的 URL,其中 xnl 是用户名,你将无法为用户名创建正则,因为它的格式不够独特,无法与其他可能的路径值区分开来。如果你遇到任何问题,或有改进的想法,请随时在 Github 上提出 issue。如果出现问题,请提供你运行的确切命令和问题的详细描述,这将很有帮助。如果可能,请使用 -v 运行以重现问题,并告知我出现的任何错误消息。
无——欢迎在 Github 上提出 issue 以建议任何增强功能。
祝你好运,狩猎愉快! 如果你真的很喜欢这个工具(或其他任何工具),或者它们帮你找到了丰厚的赏金,不妨请我喝杯咖啡! ☕(我正需要咖啡因!)
🤘 /XNL-h4ck3r
| 参数 | 长参数 | 描述 |
|---|
| -i | --input | 要清理(de-clutter)的 URL 文件。 |
| -o | --output | 包含清理后 URL 列表的输出文件(默认:output.txt)。如果通过管道传给另一个程序,输出将写入 STDOUT。 |
| -fk | --filter-keywords | 以逗号分隔的关键字列表,用于排除链接(如果没有参数)。这将覆盖 config.yml 中指定的 FILTER_KEYWORDS 列表 |
| -fe | --filter-extensions | 以逗号分隔的要排除的文件扩展名列表。这将覆盖 config.yml 中指定的 FILTER_EXTENSIONS 列表 |
| -rp | --remove-params | 以逗号分隔的区分大小写参数列表,将从所有 URL 中移除。这将覆盖 config.yml 中指定的 REMOVE_PARAMS 列表。例如,这可用于移除缓存破坏(cache buster)参数。** |
| -ks | --keep-slash | 输入中 URL 末尾的尾随斜杠不会被移除。因此输出中可能存在相同的 URL,一个有尾随斜杠,一个没有。 |
| -khw | --keep-human-written | 默认情况下,任何路径部分包含超过 3 个连字符 (-) 的 URL 都会被移除,因为假定这是人工编写的内容(例如博客文章),不感兴趣。传递此参数将把它们保留在输出中。 |
| -kym | --keep-yyyymm | 默认情况下,任何路径中包含 /YYYY/MM(其中 YYYY 是年份,MM 是月份)的 URL 都会被移除,因为假定这是博客/新闻内容,不感兴趣。传递此参数将把它们保留在输出中。 |
| -rcid | --regex-custom-id | 请谨慎使用! 你的目标使用的自定义 ID 的正则表达式。请确保该值用引号传入。有关更多详细信息,请参阅下面的章节。 |
| -iq | --ignore-querystring | 移除查询字符串(包括 URL 片段 #),因此输出只包含唯一路径。 |
| -fnp | --fragment-not-param | 不要以与参数相同的方式处理 URL 片段 #,例如,如果链接包含过滤关键字和片段(或参数),通常该链接会被保留;但如果传了此参数且链接包含过滤词和片段,该链接将被移除。此外,如果传了此参数并使用 -iq / --ignore-querystring,当链接中没有查询字符串时,片段将不会被移除。 |
| -lang | --language | 如果传此参数,且存在多个 URL 的路径中包含不同的语言代码,则只会输出一个版本的 URL。代码在 config.yml 的 LANGUAGE 部分中指定。 |
| -c | --config | YML 配置文件的路径。如果未传递,它将在默认配置目录中查找 config.yml 文件,例如 ~/.config/urless/。 |
| -dp | --disregard-params | 如果 URL 带有参数,则不会进行某些过滤,因为默认情况下我们希望看到所有可能的参数。如果传递此参数,则无论是否存在任何参数,都会执行过滤。 |
| -nb | --no-banner | 隐藏工具横幅(tool banner)输出(如果你通过管道将输入传给 urless,默认情况下它是隐藏的)。 |
| --version | 显示当前版本号。 | |
| -v | --verbose | 详细输出 |
-),但不是 GUID。这表示人工编写的内容,例如 how-to-hack-the-planet。如果传了 -khw 参数,则不会将其移除。/YYYY/MM/,例如年份和月份。这通常是静态内容,如博客。如果传了 -kym 参数,则不会将其移除。--disregard-params