CALENDAR
Sun Mon Tue Wed Thu Fri Sat
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< August 2017 >>
steam
Twitter
SELECTED ENTRIES
RECENT COMMENTS
CATEGORIES
ARCHIVES
Links
Ads
MOBILE
qrcode
PROFILE
OTHERS

ioaia blog><;

1記事1000文字以上を目標に書いてるらしい。
<< [CitiesXL] 適当に日本語化Mod作った | main | Cities XL 2011 日本語化mod v0.1 >>
telnetでhttpとか

WindowsにもMacOSXにも標準で用意されているtelnetコマンドでHTTPにアクセスしたりとか、色々するためのメモ。つまり、既にネット上にあふれている情報を(分かり難く)まとめただけの記事。telnetについてはwikipediaの説明でも見てください。

telnetコマンドの基本的な使い方は第一引数に接続する鯖のアドレス、第二引数に接続するポート。色々オプションはあるけど、普段指定する事は少ないので、必要ならmanでも見てください。当然ながら、OSやバージョンが違えば、telnetのオプションも変わります。

telnet sample
HTTP GET

個人的に一番良く使う。大抵の場合ヘッダ情報を見たいだけだから、HEADでも(の方が)良いんだけど、たまにHEADに対応してないサーバとかあるのでGETを使ったり。どう考えてもFirefoxでLive HTTP Headersとか使った方が楽なのは秘密。

 $ telnet www2.hitobashira.org 80
Trying 219.94.153.39...
Connected to www2.hitobashira.org.

普通HTTPは80番ポートが使われるので、第二引数には80を指定します。ここでは、www2.hitobashira.orgの80番ポートに接続しています。サーバに接続が出来、入力待ち状態になったら、HTTPの要求メッセージを入力します。

 GET /index.html HTTP/1.1
Host: www2.hitobashira.org

一行目ではメゾット、URI、HTTPバージョンを指定します。ここでは、GETメゾットを使用して、/index.htmlをHTTP/1.1を使用して取得する事を示しています。
二行目以降はHTTPヘッダで、早い話が色々なオプションを指定できます(例えば部分取得するRangeとか、リフェラを送るRefererとか)。HTTP/1.1ではHostヘッダのみ必須です。これが無いとエラーで蹴られてしまいます。また、HTTP/1.0でも、サーバ側がバーチャルホストを使用しているような環境では、Hostを指定しないと想定外のページを取得してしまうことがあります。例えば、www.clan.vcのIPアドレスは219.94.153.39ですが、http://219.94.153.39/に接続するとwww2.hitobashira.orgと同じ内容が表示され、www.clan.vcの内容は表示されません。Hostヘッダを指定しなかったときにも、これと同じ事がおこります。
最後に空行(改行のみ)を送って、サーバに要求を送ります。

HTTP/1.1 200 OK
Date: Wed, 10 Nov 2010 18:46:25 GMT
Server: Apache/2.2.4 (FreeBSD) mod_ssl/2.2.4 OpenSSL/0.9.7e-p1 DAV/2 PHP/5.3.2 with Suhosin-Patch SVN/1.6.5 mod_python/3.3.1 Python/2.5.2
Last-Modified: Wed, 04 Jun 2008 12:52:47 GMT
ETag: "381001-e1-b49d05c0"
Accept-Ranges: bytes
Content-Length: 225
Connection: close
Content-Type: text/html

<h1>test page</h1>
-><a href="http://www.hitobashira.org/">hitobashira.org homepage</a><br />
<br />
<span style="font-size: x-small"><a href="http://www2.hitobashira.org/cacti/">www2.hitobashira.org Server Status</a></span>
Connection closed by foreign host.

問題がなければ、HTTPヘッダとページのソースが帰ってくるはずです。ヘッダだけを取得した場合は、メゾットにHEADを指定すれば良いですが、稀にHEADに対応していないサーバが存在します。

HTTP POST

当然と言えば当然ですが、POSTも行なえます。POSTはテキストのみを送信するときと、バイナリを送信するときで少し方法が異なります。

$ telnet junk.clan.vc 80
Trying 219.94.153.39...
Connected to junk.clan.vc.
Escape character is '^]'.

ここまではGETと同じです。junk.clan.vcの80番ポートに接続しています。

POST /form_test.php HTTP/1.1
Host: junk.clan.vc
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

a=abcd&b=1234

先ほどはGETメゾットでしたが、今回はPOSTを指定しています。また、POSTではContent-TypeとContent-Lengthを指定しなければなりません。今回は文字列を送信するので、Content-Typeにapplication/x-www-form-urlencodedを指定します。Content-Lengthには送信する文字列の長さを指定します。今回は「a=abcd&b=1234」なので13です。

それから一行開けて、送信する文字列を入力します。ここに入力される文字列は、URLエンコードしなければなりません。最後に改行すればデータが返って来ます。

HTTP/1.1 200 OK
Date: Wed, 10 Nov 2010 21:04:08 GMT
Server: Apache/2.2.4 (FreeBSD) mod_ssl/2.2.4 OpenSSL/0.9.7e-p1 DAV/2 PHP/5.3.2 with Suhosin-Patch SVN/1.6.5 mod_python/3.3.1 Python/2.5.2
X-Powered-By: PHP/5.3.2
Content-Length: 103
Content-Type: text/html

<pre>
GET DATA: 
error : no data

POST DATA: 
a : abcd
b : 1234

FILE DATA: 
error : no data
</pre>
Connection closed by foreign host.

バイナリデータを送信するときも基本は変わりませんが、すこし面倒です。

POST /form_test.php HTTP/1.1
Host: junk.clan.vc
Content-Type: multipart/form-data; boundary=-FormDelimiterABC123
Content-Length: 253

---FormDelimiterABC123
Content-Disposition: form-data; name="text"

text area data
---FormDelimiterABC123
Content-Disposition: form-data; name="file1"; filename="file.txt"
Content-Type: text/plain

sample text file.....
---FormDelimiterABC123--

Content-Typeがmultipart/form-dataに変わります。boundaryには各データの区切りを示すのに使う文字列を指定します。もしここに指定した文字列がデータ中に現れてしまうと、問題が発生する危険性があるので、実際のブラウザの実装では長めのランダムな文字列になっている事が多いようです。Content-Lengthには送るデータの合計(最初の-から最後の-まで)の長さを指定します。因に改行も1byteです。

実際の区切りにはboundaryで指定した文字列の前に、-を二つ追加します。最初のデータは通常のテキストを送信しています。application/x-www-form-urlencodedのtext=text are dataと同じです。

二つ目のデータは、file.txtというファイルを送信しています。このとき、そのファイルがどんなデータであるかを示すためにContent-Typeを指定しなければなりません。もし何も指定しなかった場合、text/plainと認識されるようです。Content-Typeが不明な場合は、application/octet-streamを指定します。その後に一行開けて、データの内容を入れます。

なお、filenameで指定したファイルが送信されるというわけではありません。filenameはあくまでも「これから送信するデータのファイル名はxxxです」と主張するだけです。fileAの内容を転送する時にfilenameがfileBになっていても関係はありませんし、問題もないはずです。

最後に区切り文字とその後ろにさらに二つ-を追加し、改行して要求を送信します。

HTTP/1.1 200 OK
Date: Wed, 10 Nov 2010 22:30:08 GMT
Server: Apache/2.2.4 (FreeBSD) mod_ssl/2.2.4 OpenSSL/0.9.7e-p1 DAV/2 PHP/5.3.2 with Suhosin-Patch SVN/1.6.5 mod_python/3.3.1 Python/2.5.2
X-Powered-By: PHP/5.3.2
Content-Length: 110
Content-Type: text/html

<pre>
GET DATA: 
error : no data

POST DATA: 
text : text area data

FILE DATA: 
file.txt : 21byte 
</pre>
Connection closed by foreign host.

問題がなければ、データが返ってくるはずです。

HTTPS

httpsはプロトコルが異なるのでtelnetから接続する事はできませんが、opensslでほぼ同じ事ができます。windowsは同等のコマンドがなかった気がするので、別途インストールを行なわなければなりません。MacOSXは多分入ってます。UNIX系OSも大抵入ってる気がしますが、なかったらportsやらapt-getやらyumやらで入れてください。

 $ openssl s_client -connect secure.hitobashira.org:443
GET /index.php HTTP/1.1
Host: secure.hitobashira.org

実際には入力待ち状態になるまでに色々と表示されてますが、長いのでスルー。httpsでは通常443番ポートが使用されるので、443番ポートを指定します。あとは基本的にtelnetでhttpに接続するときと変わりありません。

因に、この状態だと証明書の検証ができていません。-CAfileオプションでCA証明書を指定してやり必要があります。MacOSXだとキーチェーンアクセスからRootCAをpemで書き出せるのでそれを利用するといいでしょう。

WHOIS

whoisもTCPを使用するので、telnetから問い合わせができます。大抵の場合、素直にwhoisコマンドを使用した方が楽ですが、whoisコマンドがないとか、どうしてもtelnetが使いたい場合に(どっちもまずない)。当然ながら、whoisサーバのアドレスをしっておく必要があります。

 $ telnet whois.jprs.jp 43
example.ad.jp

whoisは通常43番ポートが使用されます。そして、接続して送信されて来た文字列をそのまま問い合わせしてくれるようです。つまり、対象のサーバの43番ポートに接続して、調べたいドメイン/IPアドレスetc..を入力してッターン!するだけで問い合わせできます。

どのような情報を取得できるかはサーバによって異なります。また、サーバによっては何らかのオプションなどが用意されているかもしれません。例えばJPドメインのwhoisサーバであるwhois.jprs.jpや、JPNICのwhoisサーバであるwhois.nic.ad.jpでは、問い合わせしたいドメインやIPアドレスなどの後ろに/eをつけると、通常日本語で表示される情報が英語になります。

因にwhoisコマンドで/eをつけるときは、whois -h whois.jprs.jp example.jp/eのように、サーバを明示する必要があります(.jp/eじゃどこのどこのドメイン分からないから当然と言えば当然)。

IRC

IRCにも接続する事ができますが、日本語を扱うのは色々と面倒なので、実用はできないでしょう(誰もしないと思うけど)。ここではfriend-chat.jpに接続してみます。

telnet irc.friend-chat.jp 6667
Escape character is '^]'.
:irc.nrc.xseed.jp 020 * :Please wait while we process your connection.
NICK ioaia
USER ioaia * * :ioaia
~~~
:irc.nrc.xseed.jp 376 ioaia :End of MOTD command.

NICKコマンドでニックネームを指定し、USERコマンドでユーザ名などを指定します。USERコマンドのパラメータは ですが、hostnameとservernameは無視されるので適当で問題ないと思います。

JOIN #ioaia,#dokkanochannel
PRIVMSG #ioaia :hello world
PART #ioaia
QUIT :bye-bye
Connection closed by foreign host.

JOINコマンドでチャンネルに入ります。この時、,で区切って複数のチャンネルを指定することもできるようです。発言はPRIVMSGコマンドで行ないます。発言するチャンネルも指定しなければなりません。PARTコマンドでチャンネルから抜ける事ができます。また、QUITコマンドでサーバから切断します。この時、任意のコメントを残す事もできます。

PING :irc.nrc.xseed.jp
PONG :irc.nrc.xseed.jp

クライアントが生きているかを確認するために、しばらく何もしないとサーバからPINGが送られて来ます。そのときは適当にPONGを返します。因にPONG 1のようにしても問題無いようです。IRCコマンドの詳細はRFC 1459を確認してください。

| Development | 03:10 | comments(3) | trackbacks(0) | Permalink | このエントリーを含むはてなブックマークはてなブックマーク - telnetでhttpとか |
で、早い話が色々なオプションを指定できます(例えば部分取得するRangeとか、リフェラを送るRefererとか)
| watchesol.biz | 2013/07/29 6:44 PM |
本当にいいとバッグ、手触りも気持ちいいに感謝して、チーはころころと細心。それは継続訪れることを望んで、商売繁盛、パッケージも特別よく。
ルイヴィトン コピー http://www.tembags.com/
ルイヴィトンキーケースコピー http://www.tembags.com/louis-vuitton-key-holders-b0.html
| ルイヴィトン コピー | 2015/03/21 4:04 PM |
高仿原版皮系列 http://100klv.com/brand-xl-29.html
高仿Fendi包包 http://100klv.com/brand-xl-41.html
高仿Hermes皮帶 http://100klv.com/brand-xl-45.html
高仿Hermes錢夾 http://100klv.com/brand-xl-44.html
高仿Hermes包包 http://100klv.com/brand-xl-43.html
高仿Dior錢夾 http://100klv.com/brand-xl-50.html
高仿Dior包包 http://100klv.com/brand-xl-49.html
高仿巴黎世家錢夾 http://100klv.com/brand-xl-38.html
高仿巴黎世家包包 http://100klv.com/brand-xl-37.html
高仿COACH&#34107;馳 http://100klv.com/brand-dl-8.html
高仿Chloe包包 http://100klv.com/brand-xl-39.html
| シャネルココ コクーン | 2015/11/03 4:41 PM |









http://ioaia.jugem.jp/trackback/28