
迅速で雑な HTTP/S「有機的」トラフィックジェネレーター。
事前定義された ROOT_URLS から始まり、ページ上のリンクをランダムに「クリック」して、事前定義された MAX_DEPTH に達するまで漫然とインターネットを「閲覧」する、シンプルな(出来の良くない)Python スクリプトです。
インシデントレスポンス / ネットワーク防御シミュレーション用のノイズジェネレーターとして作成しました。唯一の問題は、私のシミュレーション環境には複数の IDS/IPS/NGFW デバイスがあり、固定トラフィックの単純な TCPreplays を通過させず、ログも記録しないことです。実際のユーザーがウェブを閲覧するのを模倣する、可能な限り有機的なトラフィックが必要でした。
Ubuntu 14.04 & 16.04 ミニマルでテスト済みですが、Python がインストールされているシステムならどこでも動作するはずです。
これ以上ないほどシンプルです...
まず、スクリプトの先頭でいくつかの設定を指定します...
MAX_DEPTH = 10, MIN_DEPTH = 5 各ルート URL(例: www.yahoo.com)から始めて、ジェネレーターは MIN_DEPTH と MAX_DEPTH の間でランダムに選択された深さまでクリックします。各 HTTP GET リクエストの間隔は、次の 2 つの変数の間でランダムに選択されます...
MIN_WAIT = 5 リクエスト間で最低 5 秒待ちます... あまりに速くリクエストするとウェブサーバーを怒らせがちなので注意してください。
MAX_WAIT = 10 意味はお分かりでしょう。
DEBUG = False 簡易的なロガー。デバッグや開発用にコンソールへの詳細なリアルタイム出力を有効にするには True に設定します。後でちゃんとしたロギングを組み込むかもしれません(たぶん)。
ROOT_URLS = [url1,url2,url3] ブラウジングを開始するルート URL のリスト。ランダムに選択されます。
blacklist = [".gif", "intent/tweet", "badlink", etc...] すべてのリンクをチェックする文字列のブラックリスト。リンクがこのリストのいずれかの文字列を含む場合、そのリンクは破棄されます。「Tweet this!」リンクや画像ファイルへのリンクなど、トラフィックジェネレーターに適さないものを避けるのに役立ちます。
userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3).......' お察しの通り、ヘッドレスブラウザーがウェブサーバーに渡すユーザーエージェントです。デフォルトのままでも問題ないと思いますが、変更しても構いません。一般的で有効なものを使うことを強くお勧めします。そうしないとすぐにレート制限に掛かる可能性が高いです。
必要なのは 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 がエラーをスローしたときの良い例です。その URL をメモリ内の config.blacklist 配列に追加するだけで、ブラウジングを続けます。これにより、既知の不良 URL がキューに戻るのを防ぎます。