ヘッダーとエージェント情報がないhttpリクエストに対してDOS防止システムをテストしたいと思います。それができるツールはありますか?私はこのコマンドで包囲を試みました
siege -c 3 -b -H "Host: " -A "" http://10.0.1.2/
このコマンドは、空のホストとエージェントの値を含むリクエストを送信します。私が欲しいのは、ホストとエージェントの値を定義せずにリクエストを送信することです。
アドバイスをありがとう...
最悪の場合、 netcat を使用できます。
nc example.com 80 << http_message_file
どこ example.com
は接続先のホスト、80
は接続先のポート(通常のHTTPサーバーポートなので80を選択しました)とhttp_message_file
には、送信する正確なHTTPリクエストが含まれています。
GET /path/to/resource HTTP/1.1
Host: example.com
curl
を使用してこれを行う最も簡単な方法について誰も言及しなかったことに驚いています。
curl -H "User-Agent:" -H "Host:" http://10.0.1.2/
-H
引数を使用して、カスタムヘッダーを設定したり、値を設定しないことでそれらを削除したりできます。
そのコマンドが私のサイトで何をするかの例、-v
冗長性のために追加されました:
andre@network ~ % curl -H "User-Agent:" -H "Host:" http://andredaniel.me -v
* Rebuilt URL to: http://andredaniel.me/
* Hostname was NOT found in DNS cache
* Trying 2a01:7e00::f03c:91ff:fe89:63c8...
* connect to 2a01:7e00::f03c:91ff:fe89:63c8 port 80 failed: Connection refused
* Trying 85.159.208.85...
* Connected to andredaniel.me (85.159.208.85) port 80 (#0)
> GET / HTTP/1.1
> Accept: */*
>
< HTTP/1.1 400 Bad Request
< Server: nginx/1.6.2
< Date: Mon, 29 Dec 2014 13:09:44 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 172
< Connection: close
<
[page contents truncated]
ご覧のとおり、Hostヘッダーとuser-agentヘッダーの両方が欠落しており、仮想ホストを使用しており、その場合はHostヘッダーが不可欠であるため、Webサーバーはそれほど気になりません。
これがうまくいくかどうかはわかりませんが、なぜうまくいかないのでしょうか。簡単にpythonを使用して、好きなようにリクエストを送信できます:
import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'Michael Foord',
'location' : 'Northampton',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
からpython doc: http://docs.python.org/2/howto/urllib2.html#headers
同じことを試してみますが、user_agentとヘッダーを空にすると、私の小さなテストでうまくいきました。
これが私がテストしたスニペットです:
import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = ''
values = ''
headers = { '' : '' }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()