そのため、 http://www.rssweather.com/dir/Asia/India のいずれかの都市から気温を取得する必要があります。
Kanpurを取得したいとします。
NetcatでHTTP GETリクエストを行う方法は?
私はこのようなことをしています。
nc -v rssweather.com 80
GET http://www.rssweather.com/wx/in/kanpur/wx.php HTTP/1.1
私が正しい方向にいるかどうかは正確にはわかりません。 netcatでHTTP getリクエストを行う方法に関する良いチュートリアルが見つからないので、ここに投稿しています。
もちろん、Googleで検索された標準を掘り下げることもできますが、実際には、1つのURLのみを取得したい場合は、努力する価値はありません。
ポートでリスニングモードでnetcatを起動することもできます。
nc -l 64738
...そして、実際のブラウザでこのポートにブラウザリクエストを行います。ブラウザにhttp://localhost:64738
と入力するだけで確認できます。
実際の場合、問題はHTTP/1.1が接続を自動的に閉じないが、取得したい次のURLを待つことです。解決策は簡単です。
HTTP/1.0を使用します。
GET /this/url/you/want/to/get HTTP/1.0
Host: www.rssweather.com
<empty line>
または、Connection:
リクエストヘッダーを使用して、その後に閉じるサーバーを指定します。
GET /this/url/you/want/to/get HTTP/1.1
Host: www.rssweather.com
Connection: close
<empty line>
Extension: GETヘッダーの後に、リクエストのパス部分のみを書き込みます。データを取得するホスト名は、私の例でわかるように、Host:
ヘッダーに属します。これは、同じWebサーバー上で複数のWebサイトを実行できるため、ブラウザーはページをロードするサーバーを指定する必要があるためです。
これは私のために働く:
$ nc www.rssweather.com 80
GET /wx/in/kanpur/wx.php HTTP/1.0
Host: www.rssweather.com
そして、ダブル<enter>
、つまり、リモートhttpサーバーに対して1回、nc
コマンドに対して1回。
ソース: pentesterlabs
Netcatを使用/インストールする必要さえありません
fdを使用します
exec 88<>/dev/tcp/rssweather.com/80
echo -e "GET /dir/Asia/India HTTP/1.1\nhost: www.rssweather.com\nConnection: close\n\n" >&88
sed 's/<[^>]*>/ /g' <&88
MacOSでは、次のように-cフラグが必要です。
Little-Net:~ minfrin$ nc -c rssweather.com 80
GET /wx/in/kanpur/wx.php HTTP/1.1
Host: rssweather.com
Connection: close
[empty line]
応答は次のように表示されます。
HTTP/1.1 200 OK
Date: Thu, 23 Aug 2018 13:20:49 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
-cフラグは、「CRLFを行末として送信」と説明されています。
HTTP/1.1に準拠するには、ホストヘッダーと、キープアライブを無効にする場合の「Connection:close」が必要です。
python3 http.server
でローカルでテストする
これもテストするための楽しい方法です。 1つのシェルで、ローカルファイルサーバーを起動します。
python3 -m http.server 8000
次に、2番目のシェルで要求を作成します。
printf 'GET / HTTP/1.1\r\nHost: localhost\r\n\r\n' | nc localhost 8000
HTTP 1.1ではHost:
ヘッダーが必要です。
次のように、ディレクトリのHTMLリストが表示されます。
firefox http://localhost:8000
次に、ファイルとディレクトリをリストして、応答を観察することができます。
printf 'GET /my-subdir/ HTTP/1.1\n\n' | nc localhost 8000
printf 'GET /my-file HTTP/1.1\n\n' | nc localhost 8000
リクエストが成功するたびに、サーバーは次を出力します。
127.0.0.1 - - [05/Oct/2018 11:20:55] "GET / HTTP/1.1" 200 -
受信したことを確認します。
example.com
この [〜#〜] iana [〜#〜] 維持されているドメインは、別の良いテストURLです。
printf 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80
と比較してください http://example.com/
https
SSL
nc
はhttps
URLを処理できないようです。代わりに、次を使用できます。
Sudo apt-get install nmap
printf 'GET / HTTP/1.1\r\nHost: github.com\r\n\r\n' | ncat --ssl github.com 443
参照: https://serverfault.com/questions/102032/connecting-to-https-with-netcat-nc/650189#650189
nc
を試すと、ハングします:
printf 'GET / HTTP/1.1\r\nHost: github.com\r\n\r\n' | nc github.com 443
ポート80
を試行しています:
printf 'GET / HTTP/1.1\r\nHost: github.com\r\n\r\n' | nc github.com 443
https
バージョンへのリダイレクト応答を与えるだけです:
HTTP/1.1 301 Moved Permanently
Content-Length: 0
Location: https://github.com/
Connection: keep-alive
Ubuntu 18.04でテスト済み。
私はそれが正しい答えではないことを知っていますが、httpまたはhttpsのいずれかのWebサービスの軽量デバッグを目的にncとncatを使用してテストし、curlを使用することが最も有用な出力を得るための最良のオプションであると結論付けました。
これが私のLinux bashの1行関数です。
% http_debug() { bash -c "curl -v -I --insecure ${1} 2>&1 | egrep -v '^> |^< |^{|^}|^* T|^* AL|^ 0' "; };
使用法:
% http_debug https://duckduckgo.com/
出力:
* Connected to duckduckgo.com (107.20.240.232) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* Server certificate:
* subject: C=US; ST=Pennsylvania; L=Paoli; O=Duck Duck Go, Inc.; CN=duckduckgo.com
* start date: Sep 18 00:00:00 2018 GMT
* expire date: Sep 23 12:00:00 2019 GMT
* issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
* SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55f9d1e1e900)
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
0 5418 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
* Connection #0 to Host duckduckgo.com left intact
HTTP/2 200
server: nginx
date: Wed, 15 May 2019 18:02:26 GMT
content-type: text/html; charset=UTF-8
content-length: 5418
vary: Accept-Encoding
etag: "5cdc4dc7-152a"
strict-transport-security: max-age=31536000
x-frame-options: SAMEORIGIN
content-security-policy: default-src https: blob: data: 'unsafe-inline' 'unsafe-eval'; frame-ancestors 'self'
x-xss-protection: 1;mode=block
x-content-type-options: nosniff
referrer-policy: Origin
expect-ct: max-age=0
expires: Wed, 15 May 2019 18:02:25 GMT
cache-control: no-cache
accept-ranges: bytes