私は他のプログラムでtraceroute機能を提供していますが、ルート(スーパーユーザー)権限は必要ありません。私はいつもrawソケットがrootである必要があると仮定してきましたが、別の方法がありますか? (私は誰かが "supertrace"または "tracepath"と言ったと思う?)ありがとう!ルート特権を必要とせずにtracerouteのようなプログラムを実行するにはどうすればいいですか?
答えて
ターゲットにpingを実行し、TTLを徐々に増加させ、「TTL超過」レスポンスの発生場所を監視します。
rawソケットを使用するのではなく、より高い番号のtcpまたはudpポートを使用するアプリケーションもあります。 tcpポートを既知のウェブサーバのポート80に向けることによって、そのサーバにtracerouteすることができます。欠点は、宛先デバイス上でどのポートが開いているかを知る必要があることです。
私はrootを必要とせずにこれを行った単一のツールを探してみました。私はできなかった。 google.comと言い換えるとルートを必要としない例がありますか? –
ICMPパケットの送受信にRAWソケットを使用する必要はありません。少なくともWindows上ではありません。
カスタムTTLを持つパケットはどうですか? – brian
99.99%が間違っています。 ICMPメッセージを偽造&送信するにはrawソケットが必要ですが、デフォルトで無効になっているLinuxシステムのICMPエコー要求メッセージは100%間違っていません。 –
@ jean-loup - 私は数年前にICMPを内部的に実装してサーバを監視していたネットワーク監視システムに私のコメントを基づいています。 rawソケットは使用しませんでした。これはほぼ10年前のことだったので、事態が変わった可能性があります。また、すべてのバージョンのWindowsが実際にはrawソケットをサポートしているわけではありません。マイクロソフトが実際にそれらを有効にしたときは覚えていませんが、セキュリティ上の理由からXP SP2で無効にしました。それ以来彼らが何をしたのか分かりません。 – Ferruccio
最新のLinuxディストリビューションをお持ちの場合は、traceroute(またはtracerouteがsetuidになる前のtracepath)とtcptracerouteを見ることができます。それらのどれもRAWソケットを必要としません - Fedora 9でチェックされて、彼らはsetuidではなく、通常のユーザーのためのデフォルトオプションで動作します。
tcptracerouteが行うコードを使用すると、有用なのは、アドレスへのICMPパケットが必ずしもポート80へのTCP接続と同じ場所で終わるとは限らないためです。
int opt_on = 1;
int opt_off = 0;
fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)
setsockopt(fd, SOL_IP, IP_MTU_DISCOVER, &opt_off, sizeof int)
setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &opt_on, sizeof int)
setsockopt(fd, SOL_IP, IP_RECVTTL, &opt_on, sizeof int)
...そしてCMSG結果からデータを読み込む:
(通常のユーザとして)のtracerouteのstraceのをやって、それが何かをやって示しています。
traceroute.cのソースコードは、パケットのTTLを書き直すためにユーザがrootであることを期待しています。もしあなたがディストリビューションを見ていれば、おそらくsetuid rootです。 – brian
pingおよびtracerouteはICMPプロトコルを使用します。 UDPやTCPと同様に、これは通常のソケットAPIを通じてアクセス可能です。 1024より小さいUDPおよびTCPポート番号だけが、ルート以外の使用から保護されます。 ICMPは、すべてのユーザーが自由に利用できます。
実際にpingとtracerouteの動作を確認したい場合は、CodeProjectからサンプルCコード実装をダウンロードできます。
要約すると、ICMPソケットを簡単に開き、ターゲットに達するまでsetsockoptを使用してtracerouteがTTLを増分します。
- 1. スーパーユーザー権限が必要なプログラムでValgrindを実行するにはどうすればよいですか?
- 2. ルートを実行せずにAngularJSでクエリパラメータを設定するにはどうすればよいですか?
- 3. APIを使用せずにプログラムで検索を実行するにはどうすればよいですか?
- 4. ./a.outコマンドを使用せずにプログラムを実行するにはどうすればよいですか?
- 5. ポート80でルート権限を持つフラスコアプリを実行するにはどうすればよいですか?
- 6. 別名を必要とせずにlinuxで特定のフラグを使ってsshコマンドを実行するにはどうすればいいですか?
- 7. スパイスパイダーをプログラムで簡単なスクリプトのように実行するにはどうすればよいですか?
- 8. ユーザーネームスペースを持つ特権ユーザーとしてドッカーコンテナを実行するにはどうすればいいですか
- 9. プログラムでイベントを実行するにはどうすればよいですか?
- 10. Pythonプログラムでテキストファイルと特定の行を読み込ませるにはどうすればよいですか?
- 11. "SYSTEM"アカウントで実行されているC#コードは、プロンプトをトリガせずに高度を必要とするプログラムをどのように起動しますか?
- 12. 新しい結果を得るために再実行する必要のないプログラムを作成するにはどうすればよいですか?
- 13. 似たようなルートで特定のコントローラ/アクションにリダイレクトするにはどうすればよいですか?
- 14. 実行せずにRコマンドプロンプトの次の行に移動するにはどうすればよいですか?
- 15. プログラムの実行に必要なC++の再配布可能ファイルを特定するにはどうすればよいですか?
- 16. 管理者権限を必要とせずに、MicrosoftのグラフAPIでサインインしたユーザーのグループにアクセスするにはどうすればよいですか?
- 17. 長時間実行しているGoプログラムを実行するにはどうすればよいですか?
- 18. GUIをフリーズせずにTKinterからメソッドを実行するにはどうすればよいですか?
- 19. バックボーンビューを不必要に破壊しないようにするにはどうすればよいですか?
- 20. これをプログラムで行うにはどうすればよいですか?
- 21. テンソルフローのパラメータを更新せずにセッションを実行するにはどうすればよいですか?
- 22. 拡張ボタンをクリックせずにこのコードを実行するにはどうすればよいですか?
- 23. スクリプトでスーパーユーザー権限をプログラムで実装するにはどうすればよいですか?
- 24. ロボットを破壊しないでプログラムを実行するにはどうすればよいですか?
- 25. アプリケーションに昇格された特権が必要かどうかを確認するにはどうすればよいですか?
- 26. 高い権限でWiXからngenを実行するにはどうすればよいですか?
- 27. コマンドを実行せずにbash履歴に追加するにはどうすればよいですか?
- 28. MonoDevelopを使用せずにiPhoneシミュレータを実行するにはどうすればよいですか?
- 29. sbtを使用せずにsbt管理アプリケーションプロジェクトを実行するにはどうすればよいですか?
- 30. サンドボックスを使用せずにサンドボックスOS Xアプリを実行するにはどうすればよいですか?
音がうまくいくようですが、少し複雑です。 – UnkwnTech
これは実際にtracerouteがすることです。 – Ferruccio
Cでrawソケットを使用せずにTTLをどのように増やしますか? – brian