
빠르고 조잡한 HTTP/S "자연스러운" 트래픽 생성기.
빠르고 조잡한 HTTP/S "유기적" 트래픽 생성기입니다.
그저 사전 정의된 ROOT_URLS에서 시작해 페이지의 링크를 무작위로 "클릭"하며 사전 정의된 MAX_DEPTH에 도달할 때까지 인터넷을 멍하니 "서핑"하는 단순한(제대로 작성되지 않은) Python 스크립트입니다.
침해 대응(Incident Response) / 네트워크 방어(Network Defense) 시뮬레이션에 사용할 노이즈 생성기로 만들었습니다. 유일한 문제는 제 시뮬레이션 환경에 여러 대의 IDS/IPS/NGFW 장비가 있어서 저장된 트래픽의 단순한 TCPreplays를 통과시키지 않고 로그도 남기지 않는다는 점이었습니다. 그래서 본질적으로 실제 사용자가 웹을 서핑하는 것과 같은 최대한 유기적인 트래픽이 필요했습니다.
Ubuntu 14.04 및 16.04 minimal에서 테스트했지만 Python이 설치된 모든 시스템에서 작동할 것입니다.
이보다 더 단순할 수는 없습니다...
먼저 스크립트 상단에서 몇 가지 설정을 지정하세요...
MAX_DEPTH = 10, MIN_DEPTH = 5 각 루트 URL(예: www.yahoo.com)에서 시작하여 생성기는 MIN_DEPTH와 MAX_DEPTH 사이에서 무작위로 선택된 깊이까지
클릭합니다.모든 HTTP GET 요청 사이의 간격은 다음 두 변수 사이에서 무작위로 선택됩니다...
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).......' 짐작하셨겠지만, 헤드리스 브라우저가 웹 서버에 전달하는 user-agent입니다. 기본값으로 두어도 되지만, 원할 경우 변경해도 됩니다. 흔히 쓰이는 유효한 값으로 설정하는 것을 강력히 권장합니다. 그렇지 않으면 곧 속도 제한(rate-limited)을 받게 될 가능성이 높습니다.
필요한 것 중에 없을 수도 있는 유일한 것은 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이 큐로 다시 유입되는 것을 방지합니다.