今だけ人気マンガ100円レンタル特集♪

windows2000上で言語はVBまたはCを利用してSNMPエージェントからのTRAPを受信したりエージェントにデータ要求するソフトを開発したいのですが
SNMPが始めてなものでどういった手順で開発すればよいのかわかりません。
ちなみにMIBはプライベートMIBで、市販のネットワーク管理ツールを使用する予定もありません。
具体的なお話でも、参考になる書籍やホームページの紹介でもその他何でも参考になると思われる情報を頂けたら幸いです。宜しくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

CやVBで基本的なソケットプログラミングはできるのでしょか


その技術があればあとはsnmpを理解するだけです。
MIBファイルを参照すると解るのですがある規則に則って
かかれているので簡単にプログラムに組み込む事ができます。
問題はプライベートMIBをいかに解析していくかです。
snmpmibブラウザやトラップレシーバーは体験版等を参考にしてください。
    • good
    • 0
この回答へのお礼

apolo13さん。ご教示ありがとうございます。
ソケットを使えるのかどうかのレベルすらわかっていませんでした。
winsockでちょっとした社内チャットをお遊びで作ったことがある程度なのでもっとしっかり勉強していきたいとおもいます。
snmpmibブラウザ・トラップレシーバは初めて聞くものなので早速、情報を収集し参考にしたいと思います。
ありがとうございました。

お礼日時:2001/11/20 08:43

PONKICHI22さん、はじめまして。



まず、参考になる書籍としては以下がお勧めです。

題名:   SNMP, SNMPv2, and CMIP
著者:   William Stallings
日本語版: 「SNMPバイブル」、発売元は(株)星雲社

また、過去のSNMPに関する質問では以下があります。
私も回答していますが、この質問内の参考URLも見て下さい。

 http://oshiete1.goo.ne.jp/kotaeru.php3?q=97399

なお、ご存じかとは思いますが、開発する際はMSのSDKが必須かと思います。確か。

開発頑張って下さい!

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=97399
    • good
    • 0
この回答へのお礼

igmpさん、はじめまして。
さっそく「SNMPバイブル」購入し、勉強します。開発がんばります!
ありがとうございました。

お礼日時:2001/11/14 08:37

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「MIB」「SNMP」について、解り易く知りたいのですが。

NT4.0 NETWORKでどんな役割をしているのか、把握したいのですが。
Web SiteでGlossaryを確認したのですが、いまいち呑み込めません。
NETWORK初心者にLevelを下げた言葉でお願いしたいのですが。
何かに例えて貰ったり歴史背景がわかれば有り難いです。

ちなみに、IP Ver4・Switching Hub・Router・DNSの役割は把握してます。

どうぞよろしくお願いします。

Aベストアンサー

SNMPとはご存知かと思いますが、ネットワーク管理のための
プロトコルで、通常AgentとManagerがあります。

簡単に言えば、AgentはMIBに定義された項目に従って管理される側、
また、ManagerはそのMIBで定義された情報を管理するものです。

通常インテリジェントHub、Routerでは必ずSNMP Agnetが搭載されていて、
例えば常に送受信したパケット数、エラーパケット数等をカウントしていて、
Managerからの要求があった場合にはその情報がAgentからManagerに対して
送信されます(その逆もあるんですが)。

また、MIBにはSNMP Agentが必ずサポートしなければいけないと定められている
MIB-2という基本的なものと、その機器特有のMIB(rfcで定義)、さらにメーカ
独自に定義したエンタープライズMIBといわれるMIBもあります。
ちなみに、機器特有のMIBに関してですが、将来家庭の電化製品にもLANが導入さ
れた場合、冷蔵庫MIB、テレビMIB、お風呂MIB(?)とかが出来て(ひょっとして既
にあるかも知れません)、一つのPCから全ての管理が出来る時代が来るのかも知れ
ません。

以上、とりとめもなく書いてしまいましたが、SNMPの概要に関しては参考URL
をご参照下さい。

参考URL:http://www.compaq.co.jp/products/network/languide/snmp.html

SNMPとはご存知かと思いますが、ネットワーク管理のための
プロトコルで、通常AgentとManagerがあります。

簡単に言えば、AgentはMIBに定義された項目に従って管理される側、
また、ManagerはそのMIBで定義された情報を管理するものです。

通常インテリジェントHub、Routerでは必ずSNMP Agnetが搭載されていて、
例えば常に送受信したパケット数、エラーパケット数等をカウントしていて、
Managerからの要求があった場合にはその情報がAgentからManagerに対して
送信されます(その逆もあるんですが)。
...続きを読む

QSNMPトラップ情報をC#.netで作るバッチプログラムで取得しメールに添付して送信したい

VB2012にてバッチプログラムを作成中です。
イベントログとSNMPトラップでエージェントを監視するための
ツールが欲しいということでネットワークエンジニアの方に頼まれてのことです。

特定のイベントログをメールに添付して送信する機能は実装できたのですが
SNMPトラップに苦戦しています。

WMIを通して取得できそうだったので
その線で調べ進めていたのですが
そもそも定期的に動くバッチで
いつ発生するかわからないトラップ情報を受信しようとすることから
土台無理な話ではないかと思えてきました。

まずトラップ情報を受信するための常に起動させておくプログラムを
作り、そのプログラムにトラップ情報をテキストで保存しておいて
それをバッチプログラムでとってくる必要があるでしょうか。
またはそれに代わる仕組みがそもそも標準であればいいのですが無さそう、、、

一週間ほどネットを調べまわっているので
使えそうなサイトは9割がた既読済みだと自負しています。
ただし私は文系大学卒のプログラム自体未経験の15年卒新入社員ですので
読んだサイトの理解度は良くて半分といったところかと思います。

net-snmpなどのツールを使えばいいじゃんと
言ってしまいたくなるかもしれませんが

このバッチでSNMPトラップをもってこれるのかこれないのか
どうしてもってこれないのか(実現不可能な理由)
どうしたらもってこれるのか(実現方法)
ネットワークについての知識、プログラミングについての知識
両方が必要になるかと思いますので
これについてはググっとけ
といったことでも構いません。
なにか糸口がつかめればと思います。

質問するうえでこれを教えてもらわんと回答のしようがない
といった要素がありましたら補足いたします。

お願いします。

実装予定環境は
windows2008R2 .net3.5 です

VB2012にてバッチプログラムを作成中です。
イベントログとSNMPトラップでエージェントを監視するための
ツールが欲しいということでネットワークエンジニアの方に頼まれてのことです。

特定のイベントログをメールに添付して送信する機能は実装できたのですが
SNMPトラップに苦戦しています。

WMIを通して取得できそうだったので
その線で調べ進めていたのですが
そもそも定期的に動くバッチで
いつ発生するかわからないトラップ情報を受信しようとすることから
土台無理な話ではないかと思えてきま...続きを読む

Aベストアンサー

われせんさんの発言を少し理解できていなかったようで申し訳ないです。

いくつか回答させていただきます。

・エージェントを起動する。
・UDP162ポートでリスニング待機させておく。
・任意のタイミングでエージェントから情報が送られてくる。
・受信を契機にメール送信プログラムが送られてくる。
・送信したら再びUDP162ポートでリスニング待機。

この流れで良いんですよね?

ですので
>>このバッチでSNMPトラップをもってこれるのかこれないのか
>>どうしてもってこれないのか(実現不可能な理由)
>>どうしたらもってこれるのか(実現方法)

ここの意味がよくわからず混乱してしまいます。
これってエージェントの仕事ですよね?
開発するのは最初に書いたリスニング機能ではないんですか?

Q「NET-SNMP」でマネージャは作れる?

SNMPマネージャのアプリを作ろうと思っています。調べていると、「NET-SNMP」というライブラリが非常に有名であると知ったのですが、マネージャの実装も可能なのでしょうか?(エージェントとして、インストールするのは検索するとすぐ出てくるのですが)

また、可能である場合、プログラミング言語は何なら可能なのでしょうか?

Aベストアンサー

>SNMPマネージャとしてのアプリを作りたいのですが、そういった用途には使えないのでしょうか?…

使えますよ。
WindowsであろうがUNIXであろうが用途に応じて作成すれば良いだけです。
Windows系ならWMI SNMP Provider あたりを使うとか。
他の言語でも大抵SNMP関数を持っています。
私はPHPでブラウザを利用して監視するようなものを作ることが多いですね。

QSNMPマネージャAPIでメモリリークしてしまう

初めて投稿します。
ネットワークに接続したプリンタ4台を、SNMPを使って状態監視するソフトを作成しています。以下のソース(文字数制限のため、大半をコメントで記述しています)を実行すると、SnmpMgrRequest()関数内でメモリリークを起こします。
この関数の戻り値はエラーではありません。しかもプリンタ1台のみを監視するとメモリリークしません。この関数をコメント化しても起きません。
SNMPは始めてなので何が悪いのかよくわかりません。
どなたか何かご存知であればご教示お願いします。
開発環境はWindowsXP(SP1) VC++6 SP5を使用しています。
(ソースの拡張子は.cです。)

void main(){
while(1){
for (i = 0 ; i < 4 ; i++) {
mib=StsGet([プリンタのIPアドレス]);
}
Sleep(600);
}
}

int StsGet(LPSTR adr) {
//SnmpUtilMemAlloc ()でSNMPエージェントのアドレス取得
//SnmpUtilMemAlloc()でコミュニティ取得
//変数バインディングの初期化
//SnmpMgrStrToOid()でOIDを文字列から値に変換
//SnmpUtilMemReAlloc ()で変数バインディングにメモリを割当て
//変数バインディングにOIDを追加
//SnmpMgrOpen ()でSNMPマネージャAPIのオープン(タイムアウト:100ms、リトライ:1回)
// SnmpMgrRequest()でSNMPマネージャAPIに指定操作(Get)を要求
//SnmpUtilVarBindListFree(),SnmpUtilMemFree()で各変数を解放
//SnmpMgrClose()でSNMPマネージャAPIとの接続を終了
return [プリンタ状態;]
}

初めて投稿します。
ネットワークに接続したプリンタ4台を、SNMPを使って状態監視するソフトを作成しています。以下のソース(文字数制限のため、大半をコメントで記述しています)を実行すると、SnmpMgrRequest()関数内でメモリリークを起こします。
この関数の戻り値はエラーではありません。しかもプリンタ1台のみを監視するとメモリリークしません。この関数をコメント化しても起きません。
SNMPは始めてなので何が悪いのかよくわかりません。
どなたか何かご存知であればご教示お願いします。
開発環...続きを読む

Aベストアンサー

Musaffah様

Musaffah様は、WinSNMPを使用していないので、
SnmpCleanupは必要ありません。不適切なアドバイスをしてしまい、
申し訳ございませんでした。

サンプルコードありがとうございました。
さっそく、こちらでも確かめてみましたが、
メモリーリークも起きませんし、ちゃんと動作しているようです。
環境は、以下のとおりです。
Windows2000(SP4)
VC++6.0(SP6)
.NET2003

ダイアログベースのプロジェクトで、ボタンを押すと、
PrnStsGet関数を永久ループで呼び出すようにしました。
VC++6.0, .NET2003両方とも、問題なく動作しますし、
プリンターを2台モニターしても、問題ありません。

ということで、OSとVC++の最新アップデートをお勧めします。
VC++は、Service Pack6を、WindowsXPはSP2にアップデートした
上で、WindowsUpdateを実行して、最新にしたほうがいいでしょう。

会社の同僚で、ネットワーク通信プログラムがフリーズするという
問題が起きていたのですが、SP2にアップデートしたら、解決したようです。

もし、これでも、解決しないようであれば、
新規にテスト用プロジェクトを作成し、このプログラムだけを
実装して、動作テストをすることをお勧めします。
このことにより、問題の切り分けがはっきりするかもしれません。

Musaffah様

Musaffah様は、WinSNMPを使用していないので、
SnmpCleanupは必要ありません。不適切なアドバイスをしてしまい、
申し訳ございませんでした。

サンプルコードありがとうございました。
さっそく、こちらでも確かめてみましたが、
メモリーリークも起きませんし、ちゃんと動作しているようです。
環境は、以下のとおりです。
Windows2000(SP4)
VC++6.0(SP6)
.NET2003

ダイアログベースのプロジェクトで、ボタンを押すと、
PrnStsGet関数を永久ループで呼び出すようにしました。
VC++...続きを読む

QUDP通信(SNMP)したいが、うまく動かない。

下記URLの質問の続きのような質問なのですが…。

SNMPで応答を得ようと、下記のようにコードを書いてみたのですが、うまくいきません。
足りないところ、間違っているところ、こうしたらいいんじゃない?等、簡単なことでも結構です。
ご教授いただけたらと思います。
よろしくお願いします。

http://oshiete1.goo.ne.jp/qa4934857.html

//ここからコード
public class SNMP_UDPReceive2 {
public static void main(String[] arg){
System.out.println("hajimata!");
try{
byte buf[] = "Get".getBytes();
//ソケットを作成
DatagramSocket soc = new DatagramSocket();
//パケットを作成(""の中身は例です。)
DatagramPacket packet = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.1"),161);
//送信
soc.send(packet);

//受信処理
byte buf_re[] = new byte[512];
DatagramPacket packet_re = new DatagramPacket(buf,buf.length);
soc.receive(packet_re);
//受信したデータを取得
String data = new String(packet_re.getData(),0,packet_re.getLength());
System.out.println("\"" + data + "\"を受信しました");

}catch(Exception e){
e.printStackTrace();
}

}
}

下記URLの質問の続きのような質問なのですが…。

SNMPで応答を得ようと、下記のようにコードを書いてみたのですが、うまくいきません。
足りないところ、間違っているところ、こうしたらいいんじゃない?等、簡単なことでも結構です。
ご教授いただけたらと思います。
よろしくお願いします。

http://oshiete1.goo.ne.jp/qa4934857.html

//ここからコード
public class SNMP_UDPReceive2 {
public static void main(String[] arg){
System.out.println("hajimata!");
try{
byte buf[] = "Get".get...続きを読む

Aベストアンサー

No1です。
>一応"GET"命令で応答が得られたような気がしたのですが
どのような応答内容だったかわかればいいのですが…
SNMPをサポートしていない機器もあるので、確認なさってはどうでしょうか。確認が取れたのであれば、機器の電源投入時にTRAPが通知されるので、マネージャのUDPポート162で受信できるはずです。これだけでreceiveの動作確認にはなると思います。

QLPCWSTRとchar

質問なのです・・・

現在、私は[Visual Stdio.Net 2005]を使って、C++のプログラミングをしようと思いまして、今日参考書を見てやってみたのですが、

charの配列を使って、文字列を格納しそれを使おうとしたら、LPCWSTRのキャストが必要というエラーがでました。
参考書だと普通に通るらしいのですが・・・Visual Stdio.Net 2003と2005の違いなのでしょか?わかる方教えていただけませんでしょうか??

Aベストアンサー

補足です。
2005デフォルトのUNICODEを変更する方法は
プロジェクト->プロパティ->構成プロパティ->全般 の中にある
文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する]
に変更することで可能です。

QMicrosoft製のSNMPマネージャは?

WindowsのサーバーOS(2003と2008)上で動くSNMPマネージャーを探しています。
一般的にWindowsはSNMPのトラップを受信することはできても、のトラップの内容を表示したり、トラップが来たら何かコマンドを発行することはできないと聞いています。(本当でしょうか?)
よって、トラップの内容を表示したり、トラップが来たら何かコマンドを発行するためにはSNMPマネージャーが別途必要なようですが、Microsoft製のものはないのでしょうか。
もしくは、商用ではどのようなSNMPマネージャーが一般的なのでしょうか。
フリーウェアなどは世の中にたくさんあるのは知っていますが、長期にわたってサポートのある商用ソフトを探しているのです。

Aベストアンサー

運用管理ソフト呼ばれるソフトならば、トラップメッセージを受信した場合、その内容に応じたコマンド等を発行することができると思います。

運用管理ソフトには、参考URLを参照してください。

参照URLではMicrosoft製としてsystem management serverとしていますが、System CenterファミリのOperations Managerが該当すると思います。
http://www.microsoft.com/japan/systemcenter/default.mspx
このドキュメントが、次にありますので参考にしてください。
http://technet.microsoft.com/ja-jp/systemcenter/om/bb498235

一般的に使用されているソフトは、次を参照してください。
http://itpro.nikkeibp.co.jp/article/Research/20080610/307252/
これは、2008年ですが、「運用管理ソフト jp1 systemwalker Tivoli」等で検索すると最新のものが得られるかもしれません。

なお、JP1、Systemwalker、Tivoliなどは、大企業のシステムを想定していますので(中小企業向けに機能を限定したソフトを提供している可能性がありますが)、どのような機能をどう利用したいかを検討して選択することになると思います。

以上、参考になれば

参考URL:http://amecoro.seesaa.net/article/142895507.html

運用管理ソフト呼ばれるソフトならば、トラップメッセージを受信した場合、その内容に応じたコマンド等を発行することができると思います。

運用管理ソフトには、参考URLを参照してください。

参照URLではMicrosoft製としてsystem management serverとしていますが、System CenterファミリのOperations Managerが該当すると思います。
http://www.microsoft.com/japan/systemcenter/default.mspx
このドキュメントが、次にありますので参考にしてください。
http://technet.microsoft.com/ja-jp/systemcenter/om...続きを読む

Qソケット通信 同じポート番号でn対1はできない?

Windows2000クライアントが複数あり、サーバソケット用APを作成したのですが、1対1では確認できたのですが、
n対1は、手法が変わるのですか?

疑問:
PCとサーバ間でのソケット通信にて、相互に同じポートでなければいけないので、複数のPCからサーバソケット用AP
で決めたポートに繋げに行くことが可能なのですか?

Aベストアンサー

サーバのOSについての記述がないので、unix系とみなして回答します。
APを以下のように修正してください。

accept()したあと、fork()します。

親はaccept()で得たディスクリプタをclose()して再度accept()ループに入ります。

子はbind()で得たディスクリプタをclose()して、あとは1体1の場合と同様に通信を開始し、処理が終了したらexit()します。

fork()によって、接続を待つプロセスと受け付けた接続を処理するプロセスに別れることで、複数の接続を同時に受け入れ可能なサーバAPを作成します。

MTによる方法もありますが、まずはfork()をマスターしてください。

QcharからLPTSTRへの変換方法

リストコントロールにchar型の変数の値を数値として表示させたいのですが、charからLPTSTRへの洗練された変換方法がよくわからないです。

char tempChar;
CString tempString;
tempString.Format("%s", tempChar);
LPTSTR lpsz = new TCHAR[tempString.GetLength()+1];
_tcscpy(lpsz, tempString);

こんなプログラムを考えてみたのですが、汚いような気がします。もっと簡単で洗練された変換方法はないのでしょうか?

Aベストアンサー

wsprintfを使ってはどうでしょうか?

char tmpChar = 100;//表示する数値
TCHAR buf[5];
wsprintf(buf, "%d", tempChar);

QUpdateData( FALSE); による文字列データの表示更新(VC++6.0)

VC++の超初心者です.

UpdateData( FALSE );
を用いてエディットボックスの文字列の表示の更新を
試みているのですが,たとえば,以下のコードのようにボタンをクリックした際に文字列表示の更新を複数回行おうとするとうまくいきません.
具体的には一回目のUpdateData( FALSE );が反映されず二回目のUpdateData( FALSE );のみ反映されるという症状です.

なおm_mojiretsuはCstring型でエディットボックスのDDX用の変数です.

void CMyDlg::OnButton1()
{
DWORD p;

m_mojiretsu=_T("mojirstu1");
UpdateData( FALSE );

/*5秒の待ち*/
p=timeGetTime();
while(1){if((timeGetTime()-p)>5000) break;}

m_mojiretsu=_T("mojirstu1\r\nmojirstu2");
UpdateData( FALSE );

}


何か別の処理を行わなければいけないのでしょうか.
どこかに根本的なミスがあるのでしょうか.

VC歴3日程度で,右も左も分からず大変困っております.よろしくお願いします.

VC++の超初心者です.

UpdateData( FALSE );
を用いてエディットボックスの文字列の表示の更新を
試みているのですが,たとえば,以下のコードのようにボタンをクリックした際に文字列表示の更新を複数回行おうとするとうまくいきません.
具体的には一回目のUpdateData( FALSE );が反映されず二回目のUpdateData( FALSE );のみ反映されるという症状です.

なおm_mojiretsuはCstring型でエディットボックスのDDX用の変数です.

void CMyDlg::OnButton1()
{
DWORD p;

m_mojiretsu=_T("mojirst...続きを読む

Aベストアンサー

m_mojiretsu=_T("mojiretsu1");
UpdateData(FALSE);
UpdateWindow(); // <- これを追加

/*5秒の待ち*/
...

とすれば、ひとまず期待どおりの動作になると思います。

# こうするよりは、OnButton1() では変数を書き換えるべしと言う
# 自前のコマンドメッセージを投げるだけで、すぐに戻った方が
# お行儀は良いのですが...
# そこいらへんは追々調べたり試したりしてみて下さい。


人気Q&Aランキング