UNIX通信プログラミングと SNMPへの適用事例

Download Report

Transcript UNIX通信プログラミングと SNMPへの適用事例

UNIX通信プログラミングと
SNMPへの適用事例
国際産業情報学科
0994231128
水越一貴
もくじ
•
•
•
•
•
UNIX通信プログラム
TCP,UDPの通信プログラム作成
SNMPについて
SNMPを適用した通信プログラムの作成
まとめ
UNIX通信プログラム
• アプリケーションプログラムから直接ネットワークへ
データを送ることはできない
• アプリケーションプログラムからネットワークを使う
ときには間にあるインターフェイス(API)を用いる
TCP/IP関連のAPI
ソケット(Socket)
RPC(Remote Procedure)
アプリケーション
プログラム
アプリケーション
プログラム
ソケット
1
ソケット
・・・
・・・
65535
TCP/UDP
IPへ
カーネル内
ソケット
• BSD UNIX上のプロセス間通信用に開発
• 現在ではWindowsやLinux上でも使える
• アプリケーションプログラムとネットワークの
間のインターフェイス
• システムコールとして提供される
システムコール
• アプリケーションプログラムからカーネルの機
能を呼び出すために使う
ソケットで用いるシステムコール
socket
listen
sendto
bind
accept
recvfrom
close
send
connect
recv
クライアントとサーバの作成
• 実際にソケットを使ってデータを送受信するプ
ログラムを作成する
• TCPサーバ、クライアント
tcps、tcpc
• UDPサーバ、クライアント
udps、udpc
• クライアントから英小文字を送るとサーバで
英大文字に変換して返すプログラム
TCP
クライアント
サーバ
開始
開始
tcpc.c
socket
ソケットを開く
connect
コネクション確立要求
コネクション処理
send
データを送る
recv
データを受信する
受信したデータを
画面に表示
close
ソケットを閉じる
文字列を送信
文字列を受信
tcps.c
socket
ソケットを開く
bind
IPアドレスを指定
listen
コネクション受付
送受信ループ
無限ループ
accept
コネクション確立処理
recv
データを受信する
小文字を
大文字に変換
send
データを送る
close
ソケットを閉じる
送受信ループ
終了
終了
UDPクライアントサーバ
開始
開始
udpc.c
socket
ソケットを開く
bind
IPアドレスを指定
socket
ソケットを開く
sendto
データを送る
文字列を送信
close
ソケットを閉じる
送受信ループ
無限ループ
recvfrom
データを受信する
recvfrom
データを受信する
受信したデータを
画面に表示
udps.c
小文字を
大文字に変換
文字列を受信
sendto
データを送る
close
ソケットを閉じる
送受信ループ
終了
終了
実行結果
<tcps実行ホスト側>
[micchi@ikedu micchi]$ ./tcps
Handling client 157.17.49.70
<tcpc実行ホスト側>
[micchi@leaf example]$ ./tcpc 157.17.49.22 clientSERVER
CLIENTSERVER
<udps実行ホスト側>
[micchi@ikedu micchi]$ ./udps
Handling client 157.17.49.70
<udpc実行ホスト側>
[micchi@leaf example]$ ./tcpc 157.17.49.22 clientSERVER
CLIENTSERVER
SNMP(Simple Network
Management Protocol)
• ネットワークのトラフィックや機器の情報を管
理・制御するためのプロトコル
• ルータやスイッチングHUBなどをまとめて管
理できる
• UNIXやWindowsなどのマシンも管理するこ
とができる
マネージャとエージェント
管理情報の読み書き
リクエスト
管理情報
リクエストへの応答
トラップの送信
マネージャ
エージェント
OID(Object Identifier)
• OIDは管理対象を定義するもの
• 管理対象はツリー状の階層構造になっている
• オブジェクトは名前と階層ごとに数字が降ら
れている
root
ccitt(0)
standard(0)
iso(1)
identifiedorganization(3)
joint-iso-ccitt(2)
OIDの表し方
• OIDはツリーの根元から目的のオブジェクトま
でを順にならべてドットで区切る
iso(1)
例:1.3.6.1
org(3)
iso.org.dod.internet
dod(6)
internet(1)
MIB(Management Information
Base)
• ネットワーク機器がSNMPとの互換性を保つ
ためにサポートしなければならないオブジェク
トは標準MIBとして定義
1.3.6.1.2.1
標準MIB
拡張MIB
iso.org.dod.internet.mgmt.mib-2
1.3.6.1.4.1
iso.org.dod.internet.private.enterprises
コミュニティ名
• エージェントがマネージャからのリクエストを
受けるかどうかを決めるパスワードのようなも
の
• コミュニティ名が一致しないとエージェントはリ
クエストに応答しない
getmdの作成
• エージェントのMIBから管理情報を取り出す
getmd(GET Mib Data)を作成する
• getmdは以下の機能部分からなる
SNMP処理部分
ソケット処理部分
メイン部分
SNMP処理部分
• SNMPパケット
の作成
• SNMPパケット
の解析表示
パケットを作成する部分
解析して表示する部分
開始
開始
OIDをバイナリ化
する
パケットを最初
から読み出す
データの長さ
を計算
長さを計算する
パケットの値を後ろ
から格納していく
データを逆転
させる
終了
複数バイトを
整数化
データを表示
終了
ソケット処理部分
• ソケットを作成し、IP
アドレスとポート番号
を設定する
開始
socket
ソケットを開く
ホストアドレスの取得
ポート番号の取得
IPアドレスとポート
番号を設定
終了
メイン部分
•
•
•
•
オプション判別
パケットの送受信
ファイルへの書き込み
結果の表示
メイン部分
開始
コマンドラインの解析
c
p
communityを設定
l
ポート番号を設定
l_flag=1
d
d_flag=1
f
f_flag=1 コマンドの使い方を表示
SNMPパケットの作成
UDPソケットを開く
sendto
パケットを送る
recvfrom
パケットを受取る
d_flag=1か?
YES
パケットダンプ表示
NO
l_flag=1か?
YES
パケット全体を表示
NO
値を表示
NO
f_flag=1か?
ソケットを閉じる
終了
YES
h,:,?
ファイルに書き込む
getmdの書式
getmd [オプション] <IPアドレス> <OID>
-c コミュニティ名
コミュニティ名を指定する
-p ポート番号
ポート番号を指定する
-d
パケットダンプの表示
-l
パケット解析の結果を表示
-f
結果をファイルに出力
実行結果
SNMPパケット
管理情報
SNMPパケット
マネージャ
Linux(leaf) 157.17.49.70
エージェント
Catalyst 157.17.49.253
[micchi@leaf getmd-command]$ getmd -c b204 157.17.49.253 1.3.6.1.2.1.1.1.0
Cisco Internetwork Operating System Software
IOS (tm) C2900XL Software (C2900XL-H2S-M), Version 11.2(8.2)SA6,
MAINTENANCE INTERIM SOFTWARE
Copyright (c) 1986-1999 by cisco Systems, Inc.
Compiled Wed 23-Jun-99 17:48 by boba
まとめ
• UNIX通信プログラムの位置づけを把握し、
実際にプログラムを書いた
• SNMPに適用する場合に、通信処理上で必
要な詳細なことが把握できた
• 開発したプログラムではUDPパケットが損失
されることが考慮されていないのでタイムア
ウトの設定が課題である
参考文献
• 『TCP/IPとソケット クライアント/サーバ構築法』、南山智之、佐々木彬夫、
共立出版、1998年
• 『インターフェイス増刊 OPENDESIGN ネットワーク管理技術のすべて
No.10』、CQ出版、1995年
• 『入門SNMP』、Douglas R. Mauro,Kevin J. Schmidt(2001)、山本康生
監訳、福田剛士訳、オライリー・ジャパン、2002年
• 『UNIXネットワークプログラミング第2版 Vol.1 ネットワークAPI:ソケット
とXTI』、W.Richard Stevens(1997)、篠田陽一訳、ピアソンエディケー
ション、1999年
• 『基礎からわかるTCP/IP ネットワーク実験プログラミング』、村山公保、
2001年
• Michael J. Donahoo,Kenneth L. Calvert(2001),『The Pocket Guide to
TCP/IP Sockets C Version』,Morgan Kaufmann Publishers
• JPNIC RFC-JP http://rfc-jp.nic.ad.jp