一个快速而粗糙的 HTTP/S "自然"流量生成器。
只是一个简单的(写得不太好)Python 脚本,它从预定义的 ROOT_URLS 开始,随机"点击"页面上的链接,直到达到预定义的 MAX_DEPTH,从而漫无目的地"浏览"互联网。
我创建它是为了在应急响应/网络防御模拟中用作噪声生成器。唯一的问题是,我的模拟环境使用了多个 IDS/IPS/NGFW 设备,这些设备不会传递和记录简单的 TCP 重放流量。我需要流量尽可能自然,本质上要模仿真实用户浏览网页。
已在 Ubuntu 14.04 和 16.04 最小化安装上测试过,但应该可以在任何安装了 Python 的系统上运行。
就这么简单……
首先,在脚本顶部指定一些设置……
MAX_DEPTH = 10, MIN_DEPTH = 5 从每个根 URL(例如:www.yahoo.com)开始,我们的生成器会随机选择 MIN_DEPTH 和 MAX_DEPTH 之间的深度进行点击。每次 HTTP GET 请求之间的间隔是在以下两个变量之间随机选择的……
MIN_WAIT = 5 请求之间至少等待 5 秒……注意不要请求太快,否则可能会惹恼 Web 服务器。
MAX_WAIT = 10 我想你明白了吧。
DEBUG = False 一个简易的日志记录器。设置为 True 可在控制台实时打印详细信息,便于调试或开发。我以后会加入更完善的日志记录(也许)。
ROOT_URLS = [url1,url2,url3] 开始浏览时的根 URL 列表。随机选择。
blacklist = [".gif", "intent/tweet", "badlink", 等等……] 一个字符串黑名单,用于检查每个链接。如果链接包含此列表中的任何字符串,则丢弃该链接。有助于避免对流量生成器不友好的内容,例如"推文这个!"的链接或指向图像文件的链接。
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......' 你猜对了,这是我们的无头浏览器传递给 Web 服务器的用户代理。你可能可以保留默认设置,但也可以随意更改。我强烈建议使用常用/有效的用户代理,否则你很可能很快就会被限速。
你唯一可能需要安装的是 requests。使用以下命令安装:
sudo pip install requests
首先创建你的配置文件:
cp config.py.template config.py
运行生成器:
python gen.py
要了解幕后发生的更多细节,请将 config.py 中的 Debug 变量从 False 改为 True。这将提供如下输出……
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Traffic generator started
Diving between 3 and 10 links deep into 489 different root URLs,
Waiting between 5 and 10 seconds between requests.
This script will run indefinitely. Ctrl+C to stop.
Randomly selecting one of 489 URLs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recursively browsing [https://arstechnica.com] ~~~ [depth = 7]
Requesting page...
Page size: 77.6KB
Data meter: 77.6KB
Good requests: 1
Bad reqeusts: 0
Scraping page for links
Found 171 valid links
Pausing for 7 seconds...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recursively browsing [https://arstechnica.com/author/jon-brodkin/] ~~~ [depth = 6]
Requesting page...
Page size: 75.7KB
Data meter: 153.3KB
Good requests: 2
Bad reqeusts: 0
Scraping page for links
Found 168 valid links
Pausing for 9 seconds...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recursively browsing [https://arstechnica.com/information-technology/2020/01/directv-races-to-decommission-broken-boeing-satellite-before-it-explodes/] ~~~ [depth = 5]
Requesting page...
Page size: 43.8KB
Data meter: 197.1KB
Good requests: 3
Bad reqeusts: 0
Scraping page for links
Found 32 valid links
Pausing for 8 seconds...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recursively browsing [https://www.facebook.com/sharer.php?u=https%3A%2F%2Farstechnica.com%2F%3Fpost_type%3Dpost%26p%3D1647915] ~~~ [depth = 4]
Requesting page...
Page size: 64.2KB
Data meter: 261.2KB
Good requests: 4
Bad reqeusts: 0
Scraping page for links
Found 0 valid links
Stopping and blacklisting: no links
最后一个尝试的 URL 提供了一个很好的例子,说明某个 URL 抛出错误时会发生什么。我们只需将其添加到内存中的 config.blacklist 数组中,然后继续浏览。这可以防止已知的坏 URL 重新进入队列。