一個快速而骯髒的 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 返回佇列。