高専ライブ:2017年12月31日(第557回)
収録の模様をお送りしました。
- 2017年を漢字「4文字」で!
- アニメについて
- 高専生に聞きたい5つのこと 第13回 グラフ電卓研究会
- 年末年始の予定
担当:山野(F3、MC),水島(3C,MIX)、川崎(4EI),中島(3C)、中村(教員)
高専ライブ:2017年12月24日(第556回)
- クリスマスの話
- サイエンス共和国 第18回「食品に使われる材料の話」
- ラジオの話
- 2017年の振り返り
- 2018年の目標
担当:川﨑(4EI,MC)、西島(3EI,MIX)、西野(F1)、木村(F3)
macOS High Sierra で telnet が消えた
情報ネットワーク基礎の授業で、メールサーバやWebサーバに直接接続するのをデモしようとしたけど、”telnet command not found” の表示。
macOS High Sierra から telnet とか ftp が消されたらしい。
$ sudo port install inetutils
最多パスワード
恒例になりつつあるけど、クラッキングして 実際に使われていた安易なパスワードのランキング。
上位は、123456とかpasswordとか、破られて当たり前の パスワード。昨年度のランキングでも3位までは同じだ。
理由は分からんけど、”password”が、8位から4位に 急上昇。(^_^;
他校生との共同作品でふくいソフトウェア大賞受賞
福井県産業支援センター主催のふくいソフトウェアコンペティション2017にて、他校の学生さんと共同作品で5EI野村くんらのグループが、ふくいソフトウェア大賞を受賞しました。
WWWとhttp
前回の DNS とメールで紹介の抜けていた点を補足。内容は前回の講義録に追記。
WWWとhttp
WWWとは、ティム・バーナーズ=リーによって作られたサービスであり、元々は研究データの論文やデータの共有のために作られた。この際のWebサーバのデータのやり取りのためのプロトコルがhttp(Hyper Text Transfer Protocol)であり、ポート番号80のTCPを用いたものであり、最近では通信を暗号化したhttps(ポート番号443)も多く使われる。
httpでは、文字データの中に画像や音声といった情報に加え、他のデータへのリンクを埋め込むことができる HTML(Hyper Text Markup Language) のデータがやりとりされる。このHTML形式のデータを表示するためのソフトは、ブラウザと呼ばれる。
URL
WWWのデータの場所を示すものが、URL(Uniformed Resource Locator)であるが、最近ではインターネットが複雑化しLocator という表現が難しいため、URI(Uniformed Resource Identifier)と呼ぶようになってきた。
URLは基本的に、スキーマ://コンピュータ名/サーバ内ファイル位置 といった文字で構成される。URL は、HTTP だけでなく、インターネットの情報の場所を記述するために使われており、httpやhttps以外にも使う。
http
httpのサーバ(Webサーバ)とブラウザでは、以下のような手順で処理が行われる。例えば http://www.ei.fukui-nct.ac.jp/~t-saitoh/index.html のページが表示されるまでを考えると、
- ブラウザのURL欄に、目的サイトのURLを入力。
- 基本的には、スキーマ欄に記載されたプロトコル(http)名から、ポート番号と通信方法(http)を決める。
- コンピュータ名部分(www.ei.fukui-nct.ac.jp)を DNS に問合せして、得られたIPアドレスのコンピュータに接続。
- httpの最も簡単な GET メソッドでは、Webサーバに、サーバ内のファイル位置(/~t-saitoh/index.html)を伝えると、Webサーバは指定された場所のファイルを返送する。
- HTML形式のデータが指定された場合、ブラウザはその HTML をどの様に表示するか判断しながら表示する。
このような予め保存されているWebページを返送する場合は静的ページと呼ばれる。サーバのデータベースなどを参照しながらページ内容を返送する場合は、動的ページと呼ばれ、CGI(Common Gateway Interface) という手法が使われたり、動的なページを表示するためのプログラム言語(例えばPHP)が使われる。
サーチエンジン
インターネットでは、大量のWebページが出現してきたため、自分の目的に応じてWebページを探す機能が必要となってきた。このような目的のWebページを検索してくれるシステムは、サーチエンジンと呼ばれる。
ディレクトリ型
最初に現れた検索システムは、ページ作者が自分のページのURLと内容となるキーワードを登録しておき、内容のカテゴリー別に、ページの紹介文章が表示されるディレクトリ型であった。(初期のYahoo)
しかし、登録するキーワード以外の文字で探そうとすると、情報を見つけることができない。
ロボット型
これらの問題を解決すべく登場したのが、Google のようなロボット型サーチエンジンである。
ロボット型の検索システムでは、クローラーとかロボットとか呼ばれるプログラムを使い、Webページの内容をダウンロードし、そこに記載された文字を使ってURLのデータベースを作成する。クローラーは、リンクが貼られていると、そのページでも同様の処理を行い、大量の情報を次々と取得していく。
直接サーバと接続
サーバの動作を知るために、メールサーバやWebサーバと直接通信をしてみよう。
この実験をするには、telnet コマンドを使う。telnet コマンドは、タイプされた文字をサーバに送り、サーバから返答された文字を画面に表示するだけの単純なコマンドである。
使い方: telnet 相手サーバ ポート番号 (例1) メールサーバに接続 $ nslookup -query=MX fukui-nct.ac.jp # 自組織メールサーバを探す : Non-authoritative answer: fukui-nct.ac.jp mail exchanger = 10 smtp.ip.fukui-nct.ac.jp. $ telnet smtp.ip.fukui-nct.ac.jp 25 # メールサーバに接続 Trying 10.10.21.55... Connected to smtp.ip.fukui-nct.ac.jp. Escape character is '^]'. 220 ews.ip.fukui-nct.ac.jp EGVA/SMTP Ready. HELO ei.fukui-nct.ac.jp # 送信開始 250 Requested mail action okay, completed. MAIL FROM: foo@ei.fukui-nct.ac.jp # 送信元の設定 250 Requested mail action okay, completed. RCPT TO: bar@example.jp # 送信先の設定 250 Requested mail action okay, completed. DATA # メールデータ 354 Enter mail, end with "." on a line by itself. From: foo@ei.fukui-nct.ac.jp Subject: test test . 250 Requested mail action okay, completed. QUIT # 送信中止 (例2) Webサーバに接続 # http://www.ei.fukui-nct.ac.jp/~t-saitoh/ を参照 $ telnet www.ei.fukui-nct.ac.jp 80 Trying 104.215.24.241... Connected to fnctei.ei.fukui-nct.ac.jp. Escape character is '^]'. GET /~t-saitoh/ http/1.1 # GET ファイル位置 プロトコル <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard"> :
文字をキーとするハッシュ値
前回のハッシュ法では、数値(電話番号)をキーとする検索であった。 このためハッシュ関数は、数値の不規則性の部分を取り出すだけでよかった。 それでは、文字をキーとしてデータを探す場合はどのようにすればよいか?
文字列をキーとするハッシュ
文字の場合は、文字コードを用いてハッシュ値を作れば良い。
int hash_func( char* s ) {
int sum = 0 ;
for( int i = 0 ; s[i] != '¥0' ; i++ )
sum += s[i] ;
return sum % HASE_SIZE ;
}
しかし、この方法では、文字の並び順が違うだけ(“ABC”,”CBA”,”BBB”)に対して、 同じハッシュ値となってしまう。 英文字の場合は文字数も限られ、文字コード的には末尾4bitが変化するだけであり、 上位ビットは文字数に左右されることになる。 この場合、同じような文字数であれば、末尾4bitの不規則性も平均化されて、 近いハッシュ値になることが懸念される。
そこで、文字コード的に変化のある部分が、数値的に全体に影響を及ぼし、 最終的な値が広く分布するように以下のような計算とする場合が多い。
// 積算部のみ sum = ( sum * (小さめの素数) + s[i] ) % (大きめの素数) ;
このような考え方は、疑似乱数を生成する方式と近い部分が多い。
共有のあるデータの取扱い問題
struct List* join( struct List* p , struct List* q ) { struct List* ans = p ; for( ; q != NULL ; q = q->next ) if ( !find( ans , q->data ) ) ans = cons( q->data , ans ) ; return ans ; } void list_del( struct List* p ) { // ダメなプログラムの例 while( p != NULL ) { // for( ; p != NULL ; p = p->next ) struct List* d = p ; // free( p ) ; p = p->next ; free( d ) ; } } void main() { // リストの生成 struct List* a = cons( 1 , cons( 2 , cons( 3 , NULL ) ) ) ; struct List* b = cons( 2 , cons( 3 , cons( 4 , NULL ) ) ) ; struct List* c = join( a , b ) ; // c = { 4, 1, 2, 3 } // ~~~~~~~ ここは a // a,b,cを使った処理 // 処理が終わったのでa,b,cを捨てる list_del( c ) ; list_del( b ) ; list_del( a ) ; // list_del(c)ですでに消えている } // このためメモリー参照エラー発生
参照カウンタ法
上記の問題の簡単な解決方法は、参照カウンタ法である。
参照カウンタ法は、データを指すポインタ数を一緒に保存し、
- データ生成時は、refc = 1
- 共有が発生する度に、refc++
データを消す場合は、
- refc–
- refc が 0 の時は、本当に消す
struct List { int refc ; // 参照カウンタ int data ; // データ struct List* next ; // 次のポインタ } ; void list_del( strcut List* p ) { // 再帰で全廃棄 if ( p->refc <= 0 ) { // 参照カウンタを減らし list_del( p->next ) ; // 0ならば本当に消す free( p ) ; } }
ただし、参照カウンタ法は、循環リストではカウンタが0にならないので、取扱いが苦手。
G空間×ICT北陸まちづくりトライアルコンクール
12月16日に「G空間×ICT北陸まちづくりトライアルコンクール」の最終審査会が開催され、小越研究室の5EI田中さん(発表),北本くん,高島くん,三田くん,1PS西塚くんで応募した「快適なバリアフリーツアーのためのガイドマップアプリ:さぽっち」が、(株)PFUより奨励賞を頂きました。
高専ライブ:2017年12月17日(第555回)
- 雪の話
- 冬休みの話
- 高専生に聞きたい5つのこと 第12回 地球物理学研究会副会長
担当:水島(3C,MC)、中島(3C,MIX),西島(3EI)、越後(2E)、中村(教員)
DNSとメール
DNSとドメイン名
インターネットでの通信では、IPプロトコルでコンピュータを指定するが、IPアドレスは無機質で覚えるのが大変であり、これをサポートするのが、IPアドレスの電話帳でもある DNS(Domain Name Service) である。
コンピュータでサービスに使うコンピュータには、ドメイン名を割り振る。ドメイン名は、www.ei.fukui-nct.ac.jp といったピリオド区切りの名前であり、以下のような意味を持つ。
www. | ei. | fukui-nct. | ac. | jp |
ホスト名 | サブドメイン | 組織ドメイン | 組織種別 | 国ドメイン |
ただしアメリカでは、国ドメインを一般的に使わない。また最近では、世界的な企業では国ドメインが意味をなさないので、アメリカ以外でも .com や .net といった、トップレベルドメインが使われる。様々なサービスを展開している企業では、組織種別が意味をなさないため、toyota.jp といったものも増えてきた。
以下に、主要な組織ドメイン・国ドメインをあげる。
このドメイン名から、IPアドレスを調べる DNS は、ポート番号53,UDP を使ったサービスで、一般的な機器はその組織用の DNS サーバに接続して名前からIPアドレスを知ることができる。各組織の DNSサーバは、上位サーバが設けられ調べられない IP アドレスは、さらに上位のサーバに問合せが行われる。
nslookup の使い方
DNSの問合せには、nslookup というコマンドを用いる。
$ nslookup www.u-fukui.ac.jp # 福井大学のWebサーバの問合せ Server: 192.168.xx.xx Address: 192.168.xx.xx#53 Non-authoritative answer: # この例では、複数のコンピュータの Name: www.u-fukui.ac.jp # IPアドレスが求まっている。 Address: 220.110.205.26 # 負荷分散を目的とした Name: www.u-fukui.ac.jp # ラウンドロビン DNS のため Address: 202.19.136.96 :
DNSの問合せには、ドメイン名からIPアドレスを求める「正引き」とは反対に、IPアドレスからドメイン名を求める「逆引き」もある。この機能を使って、アクセスしてきたコンピュータの逆引きを行うことで、どういった組織からのアクセスかを調べることができ、危険な組織からであればアクセスを拒否するようにサーバを設定したりする。
$ nslookup 192.156.146.100 # 福井高専のWebサーバの問合せ : Non-authoritative answer: 100.146.156.192.in-addr.arpa name = sv1.ip.fukui-nct.ac.jp. :
DNSと階層構造
前回説明したDNSでは、1つのDNSサーバに処理が集中しないようにするために、階層型構成となっている。
組織に属するパソコンは、その組織用のDNSサーバに接続する。DNSサーバは自身の組織のDNS情報を提供するとともに、他の組織の DNS の問合せ結果をある程度保存し(キャッシュ)、同じ問合せがあった場合は保存した情報を返す。保存されていない場合は、上位DNSサーバに問合せを行う。最上位サーバにまで届いた問合せは、各ドメイン名を管理しているDNSサーバに問合せを行う。
パソコンがインターネットに接続できない場合は、DNS のトラブルが原因の場合もある。こういった場合には、Google が、IPアドレス 8.8.8.8 でDNSサーバを公開している。これを使って DNS のトラブルを調べることも多い。
$ nslookup www.u-fukui.ac.jp 8.8.8.8
最近のマルウェアによる攻撃手法の1つに、DNS ポイズニングという手法がある。
マルウェアに感染した際に、パソコンの DNS の設定を攻撃者用の DNS に変更することで、偽物のコンピュータに接続させる手法。
メール
電子メールは、非常に迅速にメッセージを相手に届けることができ、そのメッセージを蓄積・加 工・編集・転送できる。また、音声や画像といった情報も、複雑な文字情報に置き換えることで、 転送できるようになっている。
メールは、foo@example.co.jp といったような、ユーザ名とドメイン名から構成される。
foo | @ | example.co.jp |
ユーザ名 | ドメイン名 |
メールは、直接相手のコンピュータにメールが届くわけではない。メールは、相手のメールサーバまでメールを届ける SMTP プロトコルと、メールサーバから自分のメールを取り出す POP や IMAP というプロトコルによって行われる。
例えば、A さん(aaa@foo.co.jp) から、Bさん(bbb@bar.co.jp)にメールを出す場合には、送信処理で…
- Aさんは、メールソフトでメールを出す。この時、メールは、Aさんの利用しているメールサーバ(A-server)に SMTP で送る。
- A-server は、メールの To: の部分の ドメイン名部分より送付先のメールサーバを見つける。[MX]
- 送付先の ドメイン名 から、IPアドレスを調べ、メールは SMTP で相手のメールサーバ(B-server)に送られる。
- B-server は、メールの ユーザ名 部分をみて、各ユーザ毎にメール内容を保存する。
この後、Bさんは、自分宛のメールを受信するには…
- Bさんは、メールソフトでメールを受信しようとすると、メールサーバ(B-server)に、POP または IMAP で接続する。
- 接続時には、ユーザ名とパスワードで本人を確認する。
- POP であれば、新着メールをパソコン側にダウンロードし、一般的にメールはサーバから削除される。
- IMAP であれば、ユーザが読みたいメールをパソコンに転送し表示する。メールは削除を行わない限り、サーバに残る。
このプロトコルの流れで、注目すべき点は、SMTP でメールを送る際に、ユーザ確認が行われないことである。このため、メールでは現在でも迷惑メール(spam)を無くすことが困難となっている。
最近では、メールを自分のメールサーバに送る前に、POP/IMAP でサーバに接続して認証を受けてからでないとメールを出せないようにするなどの対応を取っているが、自組織からは、認証無しで SMTP でメールを出せる場合も多い。
[MX]メールアドレスのドメイン名では、ホスト名部分やサブドメインは省略されることも多い。送信先のメールサーバを見つける場合には、DNS の MX レコードを参照する。
$ nslookup -query=MX fukui-nct.ac.jp 8.8.8.8 : Non-authoritative answer: fukui-nct.ac.jp mail exchanger = 10 pomme.ip.fukui-nct.ac.jp. fukui-nct.ac.jp mail exchanger = 20 peche.ip.fukui-nct.ac.[spam]迷惑メールの対策として、以下のような対策が行われている。
- 組織外からメールを受信した時は、”To:”の送り先が組織内の人である確認をする。(オープンリレー対策)
- ファイアウォールで、メールサーバ以外の機器からSMTP(ポート番号25)の接続を禁止する。(OP25B)
- SPF,DKIM といった送信ドメインの認証を行う。
$ nslookup -query=TXT xxx.fukui-nct.ac.jp 8.8.8.8 : Non-authoritative answer: xxx.fukui-nct.ac.jp text = "v=spf1 +ip4:xxx.xxx.xxx.xxx +a ~all"
メールヘッダの読み方
メールには迷惑メールや、マルウェアが仕込まれたものも多い。しかしながら、偽装したメールなども多く、メールを正しく分析できる知識が必要となる。この一つとして、メールヘッダを理解することが重要となる。
メールヘッダには、その宛先(To:)や発信者(From:)や発信日時(Date:)以外にも、様々な情報が記載されている。メールヘッダを読むには、メールソフトで「表示 – メッセージのソース」を選ぶと以下のようなものが表示される。
From: メールの送信者
To: メールの宛先 漢字が含まれると
Subject: メールのタイトル =?iso-xxxx?...?= といったMIME形式
Date: メール送信日時
Received: どのコンピュータからどのコンピュータに送られたか
From:のコンピュータ名と中継されたコンピュータが無関係だと怪しい
Received-SPF: SPF(送信ドメイン認証)
DKIM-Signature: DKIM(送信ドメイン認証)
一方で、だます目的の迷惑メールでは、タイトルなどにお金やアダルトに関するキーワードであったり、有害サイトへのリンクが含まれることが多い。このため、メールソフトやメールサーバで、キーワードやURLの類似性を見て自動的に迷惑メール判定を行うことも多い。