3

rawソケットを取得するにはroot権限が必要であり、tcp / udpにはそれがないため、udpソケットを取得してicmpデータをフェッチする方法を知る必要があります。プログラミング言語はCで、OSはBSDに似ています。

(つまり、root権限なしでpingを作成したい)

4

3 に答える 3

2

root 権限がなくても UDP ping を書き込むことができます。

IP_RECVERRオプションが有効場合、すべてのエラーはソケット エラー キューに格納され、 MSG_ERRQUEUEフラグが設定されたrecvmsg (2) で 受信できます。

UDP のマニュアルを参照してください。

forge&send ルーチンはすでに SOCK_DGRAM ソケットに実装されていると思います。次に、ICMP メッセージの送信元アドレスにアクセスするには:

  • エラーを受信するようにソケット オプションを設定します (IP_RECVERR)
  • エラー キュー (MSG_ERRQUEUE) で recvmsg() を呼び出します。
  • 返された構造 (msghdr および iovec) を解析します。これには、ICMP 発行者の送信元アドレスが含まれています。
于 2015-03-27T14:50:26.770 に答える
0

UDP は OSI レイヤー 4 プロトコルであり、ICMP も同様です。これにより、レイヤー 4 プロトコルが既に UDP に固定されているため、UDP ソケットに ICMP を実装することはできません。raw ソケットを開く権限を必要とする実装を作成することを検討できます。次に、アプリケーションまたはアカウントに適切な機能を付与するか、実行可能ファイルの SUID ビットを反転して root として実行できるようにします。

于 2012-10-26T14:59:50.880 に答える
-2

それで、ええと、要件を回避するのは簡単でした.それはまだそこにあると思いますか?

ある程度のセキュリティを提供することを目的としているため、簡単に移動できるわけではありません.

私はそれができるとは思わない。

于 2012-10-26T13:10:02.810 に答える