一个快速而肮脏的 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", etc...]
我们检查每个链接的字符串黑名单。如果链接包含此列表中的任何字符串,则会将其丢弃。有助于避免那些对流量生成器不友好的事情,例如“发推文!”链接或图像文件的链接。
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 返回到队列。