빠르고 더러운 HTTP/S "유기적" 트래픽 생성기입니다.
사전 정의된 ROOT_URLS
에서 시작하고 사전 정의된 MAX_DEPTH
충족될 때까지 페이지의 링크를 무작위로 "클릭"하여 목적 없이 인터넷을 "탐색"하는 간단한(잘못 작성된) Python 스크립트입니다.
사고 대응/네트워크 방어 시뮬레이션에 사용할 노이즈 생성기로 이것을 만들었습니다. 유일한 문제는 내 시뮬레이션 환경이 미리 준비된 트래픽의 간단한 TCP 재생을 통과하고 기록하지 않는 여러 IDS/IPS/NGFW 장치를 사용한다는 것입니다. 나는 트래픽이 가능한 한 유기적이어야 했으며 본질적으로 웹을 탐색하는 실제 사용자를 모방했습니다.
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
초를 기다립니다... 웹 서버를 화나게 하는 경향이 있으므로 빠르게 요청하는 데 주의하세요.
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).......'
짐작하셨겠지만 헤드리스 브라우저의 사용자 에이전트는 웹 서버에 넘겨집니다. 기본값으로 설정해 둘 수도 있지만 자유롭게 변경해도 됩니다. 공통/유효한 것을 사용하는 것이 좋습니다. 그렇지 않으면 속도가 제한될 가능성이 높습니다.
당신에게 필요하고 없을 수도 있는 유일한 것은 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이 대기열로 반환되는 것을 방지할 수 있습니다.