情報ネットワーク演習 2007 年 10 月 11 日 ( 木 )

Similar documents
Microsoft PowerPoint pptx

情報ネットワーク演習 2006年10月5日

BSDソケットによるIPv6プログラミングを紐解く

オペレーティングシステムとネットワークプログラミング 担当 : 吉藤英明 yoshfuji+camp2008 AT wide.ad.jp セキュリティ & プログラミングキャンプ /08 OS プロトコルスタック (C)2008 YOSHIFUJI Hideaki,

システムインテグレータのIPv6対応

v6prog-05.ppt

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

memo

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ

/*

PowerPoint プレゼンテーション

memo

AsteriskのIPv6対応について

Prog1_10th

システムインテグレータにおけるIPv4アドレス在庫枯渇に向けた取り組み

Taro-ポインタ変数Ⅰ(公開版).j

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

CD U.S. Government License Proprietary computer software. Valid license from HP required for possession, use or copying. Consiste

PowerPoint Presentation

スライド 1

IPv6 普及 高度化推進協議会 IPv6/IPv4 共存 WG アプリケーションの IPv6 対応検討 SWG 2011 年 9 月に発足 IPv6 移行ガイドライン策定 IPv6 Ready ロゴプログラム Web アプリケーションガイドライン策定基盤となる Socket プログラミングの IP

Microsoft PowerPoint - CproNt02.ppt [互換モード]

情報通信の基礎

02: 変数と標準入出力

02: 変数と標準入出力

Microsoft Word - Cプログラミング演習(12)

Microsoft PowerPoint - 5Chap15.ppt

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

Microsoft PowerPoint - kougi11.ppt

Microsoft PowerPoint ppt

プログラミングI第6回

Prog1_6th

02: 変数と標準入出力

02: 変数と標準入出力

memo

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

スライド タイトルなし

学生実験 3 日目 DNS IP ネットワークアーキテクチャ 江崎研究室

演算増幅器

02: 変数と標準入出力

Prog1_12th

JavaプログラミングⅠ

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

Microsoft PowerPoint - kougi6.ppt

Microsoft Word - no12.doc

tp2ps output file

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション - 物理学情報処理演習

2006年10月5日(木)実施

(Microsoft PowerPoint - IPv6_summit_r2.ppt [\214\335\212\267\203\202\201[\203h])

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft Word - Cプログラミング演習(10)

Microsoft Word - no202.docx

Microsoft Word - no15.docx

演算増幅器

02: 変数と標準入出力

slide5.pptx

02: 変数と標準入出力

Microsoft PowerPoint - 12.ppt [互換モード]

第1回 プログラミング演習3 センサーアプリケーション

program7app.ppt

Microsoft PowerPoint - lec10.ppt

デジタル表現論・第6回

PowerPoint プレゼンテーション

目次 1. DB 更新情報受信 SW 仕様書 構成および機能 全体の構成 DB 更新情報受信 SW の機能 ソフトウェアの設計仕様 DB 更新情報受信 SW の仕様 資料編... 5

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

ポインタ変数

Microsoft PowerPoint - handout07.ppt [互換モード]

Microsoft PowerPoint - kougi7.ppt

02: 変数と標準入出力

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

C言語講座 ~ファイル入出力編~

Javaプログラムの実行手順

Microsoft PowerPoint - 09.pptx

02: 変数と標準入出力

情報処理Ⅰ演習

02: 変数と標準入出力

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Microsoft Word - WE-InstMan382J sol.doc

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint pptx

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc

Microsoft PowerPoint - 13.ppt [互換モード]

プログラミングI第10回

ポインタ変数

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

gengo1-12

アドレス枯渇対応タスクフォース アドレス枯渇対応タスクフォースとは 来るべき アドレス 枯渇を より円滑に乗り越えるために 19の組織 団体 (2009 年 8 月時点 ) が力を合わせてアドレス枯渇の影響を ネットワークシステムやアプリケーション開発に係わる様々な立場から検証すると同時に それらの

ネーミング(1)

データ構造

学生実験

アマチュア無線のデジタル通信

<4D F736F F D20B6BCB5D7B2CCDED7D8CFC6ADB1D9315F43532E444F43>

Taro-ファイル処理(公開版).jtd

昨年度までの研究紹介 および 研究計画

memo

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

Microsoft Word - Cプログラミング演習(11)

Transcription:

情報ネットワーク演習 2007 年 10 月 11 日 ( 木 )

本日の内容 課題 5 HTTP クライアントハイパーテキストへのアクセス 課題 4 HTTP サーバのビルド 課題 3 ソケットを用いたプロセス間通信 課題 1 低水準入出力 課題 2 名前解決 ( ホスト名 IP アドレス ) 2

第 2 回課題 実施内容と意図 IP アドレスとホスト名の相互変換をするプログラムを拡張する. この課題を通じて,IPv4 における名前解決の方法, および関連するライブラリルーチンや構造体の仕様を学ぶ. 3

ホスト名とは 例 nachi00 nachi00.sys.wakayama-u.ac.jp www.wakayama-u.ac.jp www.google.co.jp localhost 書式 英数字等を. でつなぐ. 人間にとって見やすい. 演習室内ではこれらは同じ計算機 ( ホスト, ノード ) を指す FQDN (Fully Qualified Domain Name) と呼ばれる 4

IP アドレスとは ( 文字列 ) 例 133.42.159.1 66.249.89.104 127.0.0.1 32 ビット 書式 0~255 の整数を 4 つ書き,. でつなぐ. ドット付き 10 進記法 (dotted decimal notation) ともいう. 人間にとって見やすい. 5

IP アドレス ( バイナリ ) 例 10000110 00101010 10011111 00000001 文字列による IP アドレスを 4 オクテット (4 バイト ) で表現し, 順番に ( ネットワークバイトオーダ, またはビッグエンディアン ) メモリに格納する. 計算機が処理するのに適している. 6

IP アドレスとホスト名を知るコマンド host Vine Linuxでも利用可 host nachi00 host 133.42.159.1 host www.google.co.jp nslookup 古い (obsolete) コマンド. 最近の Linux では非推奨 7

DNS (Domain Name System) インターネットにおけるホスト名と IP アドレスとを対応させるシステム ホスト名 IP アドレスを 正引き, IP アドレス ホスト名を 逆引き という. DNS サーバ に リゾルバ (resolver) が問い合わせて情報を得る. DNS サーバ間で情報交換をすることも 演習室環境で, 通信する DNS サーバを知りたければ cat /etc/resolv.conf ソフトウェアでは BIND (Berkeley Internet Name Domain) が有名 8

ホスト名と IP アドレスは多対多 (1) 多対多 は二つの 一対多 に分ける 一つのホスト名に複数の IP アドレス ホスト名と IP アドレスは一対多 www.l.google.com www.google.com www.google.co.jp mail.sys.wakayama-u.ac.jp ntp.sys.wakayama-u.ac.jp ns.sys.wakayama-u.ac.jp dns.sys.wakayama-u.ac.jp 66.249.89.99 66.249.89.104 133.42.159.1 一つの IP アドレスに複数のホスト名 IP アドレスとホスト名は一対多 9

ホスト名と IP アドレスは多対多 (2) 実用上は ホスト名から IP アドレスの一つ, IP アドレスからホスト名の一つ ( 正式なホスト名 ) を求めれば十分 利用例は クライアント : サーバのホスト名 IP アドレス サーバ : 例えばアクセスをログに記録する際, クライアントの IP アドレス ホスト名

IPv4 と IPv6 本演習では,IPv4 のみを対象とする. IPv4 アドレス長 : 32 ビット ( アドレス空間 : 2 32 ) IPv6 アドレス長 : 128 ビット ( アドレス空間 : 2 128 ) IP アドレスは. ではなく : で区切って表記する. 省略記法もある. IPv6 に移行しても, ホスト名は変わらない 11

相互変換プログラムを C で書くには 数個のライブラリルーチンと構造体を理解すること ライブラリルーチン : getaddrinfo, getnameinfo, inet_ntoa, freeaddrinfo 構造体 : struct addrinfo DNS サーバへの通信などは, ライブラリルーチンに任せる 12

getaddrinfo ライブラリルーチン int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); ソケットアドレス構造体を生成する. node は, ホスト名または文字列形式の IP アドレスの文字列. service は, サービス名もしくはポート番号の文字列. 今回は NULL にする. hints に, ヒント情報を格納して呼び出す ( ポインタ渡し ). res はソケットアドレスのリストのポインタのポインタ. あらかじめ struct addrinfo * 型のポインタ変数を確保した上で & 変数 と書く ( ポインタ渡し ).

addrinfo 構造体 struct は不可欠 ( struct addrinfo 型 を宣言している ) struct addrinfo { int ai_flags; /* フラグ */ int ai_family; /* プロトコルファミリ */ int ai_socktype; /* TCP, UDPの別 */ int ai_protocol; /* プロトコル詳細 */ size_t ai_addrlen; /* ai_addrのバイト数 */ struct sockaddr *ai_addr; /* IPアドレス ( バイナリ ) */ char *ai_canonname; /* ホスト名文字列 */ struct addrinfo *ai_next; /* 次へのリンク */ }; 戻り値 ( 線形リスト )... ai_addr: 133042159002... ai_next: 実際にはバイナリ形式... ai_addr: 133042160002... ai_next: NULL 適切なホスト名が格納されている保証はない

getnameinfo ライブラリルーチン int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags); アドレスから名前へ変換する. sa は IP アドレス ( バイナリ ),salen はその長さ. addrinfo 構造体の ai_addr, ai_addrlen に対応する. host にホスト名が格納される. 配列などにより, あらかじめ領域を確保しておく.hostlen はその長さを指定する. serv と servlen は,host と hostlen と同様. 今回は使用しないので,NULL と 0 を指定する. flags も,0 でよい.

inet_ntoa ライブラリルーチン char *inet_ntoa(struct in_addr in); IPアドレスをバイナリ値から文字列形式に変換する. internet: network address to ascii string 逆変換関数のinet_atonもある. 16

再入可能性 inet_ntoa は, 再入可能でない. 配列領域を別のところで (static 領域などに ) 確保しており, そのアドレスを返す. 連続して呼び出すと, 前の結果は上書きされる. getaddrinfo,getnameinfo は, 再入可能である. 連続して呼び出しても, 問題ない. 戻り値の領域を, 呼び出し側が確保し, 引数に与える. ポインタ渡しになる. getaddrinfo の内部で malloc などによりソケットアドレス構造体が作られる. 開放するには,(free ではなく ) freeaddrinfo ライブラリルーチンを呼び出す.

課題 2(1) ~takehiko/network-enshu2007/2/resolver は, ホスト名を引数にとり, その IP アドレス ( 複数あっても一つだけ ) をドット付き 10 進記法で出力する. cd ~takehiko/network-enshu2007/2./resolver nachi00.sys.wakayama-u.ac.jp 133.42.125.50./resolver www.google.com 66.249.89.147 host www.google.com... 結果は各自確認のこと 18

課題 2(2) ~takehiko/network-enshu2007/2/resolver.c をコピーして ~/network-enshu2007/2/resolver.c とし, 以下の仕様を満たすよう, 修正をしなさい. ホスト名が複数の IP アドレスに結び付けられているとき, それぞれを出力する (1 行 1 アドレスで ). 1 行を IP アドレス ( ホスト名 ) の形で出力する. ~takehiko/network-enshu2007/2/command01-answer を参考に コメントを変更 ( 作成者, 作成日時 ) し, 作業メモを残す. ディレクトリのパーミッションは 705, ファイルは 604 にしておくこと. 19

課題 2 の追加事項とヒント 課題はこれでできた, と思ったら, ~takehiko/network-enshu2007/bin/validator2 を実行してみよう. 余力のある人は,inet_ntoa を使うことなく, ドット付き 10 進記法の IP アドレスを出力するようにしてみよう.( ヒント : inet_ntoa を getnameinfo に置き換える. jman 3 getnameinfo.) 20

期限 2007 年 10 月 12 日 ( 金 )19:30 の回収までに完成させておくこと. 期限後のプログラム修正は? 最終的な回収までの修正 ( コメントの充実, デバッグなど ) は OK. 21

テストプログラムについて ~takehiko/network-enshu2007/bin/validatorα でテストする. 実行中に参照するファイル ~/network-enshu2007/α/ ソースファイル.c ~takehiko/network-enshu2007/α/commandβ ~takehiko/network-enshu2007/α/commandβ-answer 生成されるファイル ~/network-enshu2007/α/ ソースファイル ~/network-enshu2007/α/ ソースファイル _code.c ~/network-enshu2007/α/ ソースファイル _comment.c ~/network-enshu2007/α/error+warning ~/network-enshu2007/α/.commandβ-answer Everything is just fine! を目指せ! 課題番号今は 1 か 2 ドットファイル. ls -a で確認できる. 22

余談 昨年度まで当演習では,gethostbyname, gethostbyaddr といったライブラリ関数を用いていた. これらは,IPv4 にしか対応していないことや, 再入可能でない ( 連続して呼び出せない ) といった問題があった. getnameinfo などを使うと,IPv4/IPv6 の両方に対応するようになった. また, 第 3 回課題のサーバプログラムがすっきり記述できるようになる.