ブロードキャストパケットの受信について

はじめまして。
現在、Win2000環境にてSNMPのサーバーモジュールの作成を行っています。
LocalPort:161でLocalAddress:INADDR_ANYでBindして待っているのですが、受信したパケットがブロードキャストパケットか否かの判別ができなくて困っています。何か良い方法はないでしょうか?よろしくお願いいたします。

名前: 
popo
日時: 
03/03/05 14:24

コメント

popoさん,はじめまして。

うーむ。手ごわい質問ですね。
ちょこっと調べただけで,わからなかったのすが,
パケットの宛先アドレスを調べる方法ってないんでしょうかね。
知っている方いたら教えてくださると助かります。 > 皆様
RAWSOCKET使わないといけないのかしらん...

パケットを受信した後で調べるんじゃなくて,
ユニキャスト受信用と,ブロードキャスト受信用とで
二つソケットを作るなんていう方法はどうかしら。
INADDR_ANYでbindするんじゃなくて,
一つは,ユニキャストのアドレスでbindして,
もう一つはブロードキャストアドレスでbindして...
って,ブロードキャストアドレスでbindなんてできるのかしら???

ところで,どうしてSNMPでブロードキャストの判別が必要なのでしょうか?
そこに興味があります。
もし,差し支えなければ,お教えください。

ご返答ありがとうございます。

>もう一つはブロードキャストアドレスでbindして...
>って,ブロードキャストアドレスでbindなんてできるのかしら???

これなんですが、LocalAddressに0xFFFFFFFFをセットしてbindしてみたのですがWSAEADDRNOTAVAILのエラーが返ってきてNGでした。

>ところで,どうしてSNMPでブロードキャストの判別が必要なのでしょうか?

実はこのWin2000ではAddIPAddress()を使用してIPアドレスを複数保持しています。別PCからブロードキャストパケットを受信したら、あたかも複数台のプリンタがローカルネットワーク内に存在しているかのようにレスポンスを返すのが目的のプログラムです。(プリンタ管理ユーティリティの評価用プログラム)
しかし現状では、ブロードキャストパケットを受信しても任意の1つのソケットしか反応してくれないので、1台のプリンタしか見つからないという具合です・・・

やっぱり難しいことなんでしょうか・・・
もう少しRAWSOCKETについて調べてみようと思います。

> 実はこのWin2000ではAddIPAddress()を使用してIPアドレスを複数保持しています。別PCからブロードキャストパケットを受信したら、あたかも複数台のプリンタがローカルネットワーク内に存在しているかのようにレスポンスを返すのが目的のプログラムです。(プリンタ管理ユーティリティの評価用プログラム)

SNMPのリクエストってブロードキャストで送信されることってあるのかしら?
そこが,率直なところ,疑問なんです。
恐らく,ブロードキャストを送るという行為の目的は,
管理対象を探すこと(ディスカバリーとでも言うんでしょうか)だと思うのですが,
それって,SNMPとは別の枠組みでやることじゃないかと思うんです。
たとえば,片っ端からIPアドレスをスキャンするとか,
ICMP echoをブロードキャストするとか(今はこの方法は使えないのでしょうけど)。
その辺は,おぼろげな記憶で,確かではないんですが...
だから,SNMPは管理対象のアドレスがすでにわかっているものとして,
ユニキャストでリクエストを送るだけなんじゃないかと...

>もう少しRAWSOCKETについて調べてみようと思います。

もし,何かわかったら,教えてもらえると助かります。