酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

telnetを使ってTCP/IPで通信をする

Telnetを使ってTCP/IPの通信を行う例題です。WebサイトやMailへのアクセスもtelnetを使って簡単にテストすることができます。

この実験を通して、WebブラウザとWebサーバとの間でどのように通信が行われているのかを知ることができます。


telnetとは?

インターネットなどのTCP/IPネットワークで、ネットワークにつながれたコンピュータを遠隔操作をおこなうための通信方式。データを平文で送信するため、セキュリティ上の懸念があり、現在はSSHがその役割を担っている。

telnetを使ってWebサイトの情報を取得

telnetを使ってICP/IPの通信を行うことができるので、webサイトからhtmlを取得することも簡単にできます。例えば、www.yahoo.co.jpからhtmlを取得する場合は次のようにターミナルを実行するだけです。

1
2
3
4
telnet www.yahoo.co.jp 80
GET / HTTP/1.0[Enter]
Host: www.yahoo.co.jp[Enter]
[Enter]

すると出力結果は次のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 21 Jun 2014 21:22:07 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Cache-Control: private, no-cache, no-store, must-revalidate
Expires: -1
Pragma: no-cache
X-XRDS-Location: https://open.login.yahooapis.jp/openid20/www.yahoo.co.jp/xrds
Vary: Accept-Encoding

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
....
</html>

telnetからでもHTMLが取得できている事がわかります。

telnetを使ってGmailを送信

次にtelnetを使ってメールを送信してみます。

まずは、gmailのメールサーバを検索します。

1
2
3
4
5
6
7
8
9
nslookup -type=mx gmail.com                                                    Server:   10.0.1.1
Address:  10.0.1.1#53

Non-authoritative answer:
gmail.com mail exchanger = 30 alt3.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 40 alt4.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 20 alt2.gmail-smtp-in.l.google.com.

複数のドメインが優先順位をつけて登録されていることがわかります。

今回はgmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.を使って、通信を行ってみます。

1
telnet gmail-smtp-in.l.google.com 25

ですが残念ながら僕の環境ではtelnetで接続できるmailサーバを発見できずorz

telnetを使ってメールのテストを行う方法

telnetでメールを送信する方法

このあたりを見ながら、できるような気持ちになっておきますw

あとがき

実際にはtelnetもTCP/IPのコネクションを行うための処理は隠蔽してくれているため、本当意味でのローレベルではないですが、擬似的にWebブラウザやメールアプリの通信を勉強できます。

おすすめの書籍