0

udp ポートからパケットを送信すると、ネットワークが到達不能な ICMP ホストを返した場合に例外を受け取ります。例外は、(ICMP パケットの内容のような) 有益なことは何も教えてくれません。

問題ありません。ICMP をリッスンするだけで、必要な情報が得られますが、UDP ポートの例外は無視されます。したがって、生のソケットを開き、ICMP パケットをリッスンして、そこから移動します。

開発 (Win XP) では正常に動作しますが、サーバー 2008 での運用では、exe が実行されているセキュリティ コンテキストには、raw ソケットを開くことができる管理者権限が必要です。これはサービスには役に立たない。マイクロソフトが言っていることを理解できれば、私たちがやりたいことを実行できる唯一の方法は、管理者権限を持つアカウントでサービスを実行することです。管理者アカウントでネットワークに面したサービスを実行することに伴う潜在的なセキュリティ ホールは言うまでもなく、ピーナッツの大槌のように感じます。

ここで間違っていることを本当に願っていますが、上記と矛盾するものは何も見つからないようです。

コメント/ヒントや同情を得た人はいますか?

4

3 に答える 3

1

失敗した UDP 送信に対する ICMP 応答をリッスンするのではなく、ブランド スパンキングの新しい ICMP エコー リクエストを送信してみませんか?

IcmpSendEcho()例外が発生した場合は、 (Win32 IP Helper API から) 関数を PInvoke して、新しい ICMP エコー要求を自分で生成できます。重要な点は、関数がステータス コードなどを含むエコー応答を含むバッファを返すことIP_DEST_HOST_UNREACHABLEです。

これを行うのに特別な特権は必要ないと思いますので、生のソケットで ICMP 応答をリッスンするよりも簡単なはずです。

IcmpCreateFile()IcmpSendEcho()およびIcmpCloseHandle()- PInvoke.net には必要な相互運用の詳細があります。

http://www.pinvoke.net/default.aspx/icmp/IcmpCreateFile.html http://www.pinvoke.net/default.aspx/icmp/IcmpSendEcho.html http://www.pinvoke.net/default. aspx/icmp/IcmpCloseHandle.html

于 2009-04-14T12:48:15.133 に答える
0

MSDN Webサイトから:

タイプSOCK_RAWのソケットを使用するには、管理者権限が必要です。rawソケットを使用するWinsockアプリケーションを実行しているユーザーは、ローカルコンピューターのAd​​ministratorsグループのメンバーである必要があります。そうでない場合、rawソケット呼び出しはWSAEACCESのエラーコードで失敗します。Windows Vista以降では、rawソケットへのアクセスはソケットの作成時に適用されます。以前のバージョンのWindowsでは、rawソケットへのアクセスは他のソケット操作中に強制されます。

プロジェクトでこの問題を回避するために、UIアプリケーションのネットワークプロキシとして機能するWindowsサービスを作成しました。Windowsサービスは、制限を回避するためにローカル管理者アカウントで実行されます。アプリケーションはWCFを使用してサービスに接続し、開くソケットの種類と適用するフィルターを指示します。次に、データはエンコード用のプロトコルバッファを使用してコールバック経由で返送されます(少なくともそれは計画です-コールバック部分はまだ進行中です)。

于 2009-03-31T05:07:46.950 に答える