«

»

Dez
09

MaxKeepAliveRequests umgehen

HTTP ermöglicht das Offenhalten einer Verbindung um später weitere Anfragen über den selben Socket zu schicken. Dies minimiert den Overhead eines ständigen Verbindungsauf/ab-baus.

Im Apache Webserver gibt es eine Konfigurationsanweisung MaxKeepAliveRequests die die maximale Anzahl von Anfragen für eine solche offen gehaltene Verbindung bestimmt. Setzt man den Wert Beispielsweise auf 10 können in dieser einen Verbindung nur 10 Anfragen gestartet werden, danach wird der Server die Verbindung trennen.

Soweit so gut.

Nun gibt es das HTTP Feature “Range” was teilweise Dateiübertragung ermöglicht. Es ist mit Range weiterhin möglich mehrere Teile einer Datei anzufragen.
Ein HTTP Header wie etwa “Range: bytes=0-1,1-2,3-4″ würde somit jeweils das erste, zweite und dritte Byte der angeforderten Datei liefern. Eine spezielle Syntax davon ist “0-” was in etwa bedeutet schicke ab Byte 0 (Dateianfang) alles bis zum Ende der Datei.

Interessant ist das in Apache diese Range Requests nicht als KeepAlive Requests gezählt werden. Das bedeutet das obiges Beispiel mit den drei Bytes nur als ein Request gezählt wird.

Nun kann man sich ein kleines Perlscript schustern was in etwa wie folgt aussieht:

perl -e 'print "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: Keep-Alive\r\nRange: bytes=" . "0-," x 1000 . "\r\n\r\n"' | nc webserver 80

Dieser kleine Code Schnippsel schickt eine Anfrage die eintausend nicht gezählte Subrequests beinhaltet.

Hinterlasse eine Antwort

Ihre E-Mail-Adresse wird nicht veröffentlicht.

Sie können diese HTML-Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

What is 2 + 3 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)