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
© Copyright 2024 ExpyDoc