socket(2)
からファイルディスクリプタを取得しましたが、connect(2)
を実行しました。後で(実行中のプログラムの内部から)基になるトランスポート用のネットワークデバイスを特定する方法はありますか? fd上のstat(2)
へのコールは、デバイス番号0を返します。 ioctl(2)
またはgetsockopt(2)
オプションのいずれも該当しないようです。ソケットを扱うネットワークインタフェース/デバイスを見つけることはできますか?
2
A
答えて
0
accept
から、リモートクライアントのIPアドレス(Beejのhere)を取得できるはずです。非対称ルートがないと仮定すると、ローカルルーティングテーブルでそのアドレスへのルートをルックアップできます。ルーティングテーブルは、リモートクライアントにパケットを送信するために使用されるイーサネットデバイスを通知する必要があります。
EDIT:
あなたは、リモートクライアントのアドレスを使用してローカルルーティングテーブルを照会するには、次のコマンドラインツールを使用することができます。そうするための何の確実な方法はありません
ip route get <remote-client-ip-addr>
1
- POSIXは確かではないが、準拠した方法。
しかし、実際には、インターフェイスの99%を簡単に特定できます。 connect
を実行したら、getsockname
を使用してIPアドレスを取得し、一致するIPアドレスを持つボックスの使用可能なインターフェイスのリストを調べます。
関連する問題
- 1. ログバックログファイルをプログラムで見つけることはできますか?
- 2. マングースはフィールドで見つけることができますか?
- 3. タイムアウトの原因となるソケットを見つけますか?
- 4. TimeZoneDisplayNameでTimeZoneByIdを見つけることができますか?
- 5. どこでMicrosoft.Build.Utilities.v3.5を見つけることができます
- 6. C#ソケットIDを見つけるには?
- 7. 私はTPCLプログラミングマニュアルを見つけることができます
- 8. UDPソケットでインターフェイスを見つける
- 9. 私は入力パネルを見つけることができますが、私はツールボックスでそれを見つけることができませんか?
- 10. にはどうすれば見つけることができますか?
- 11. ここで、javax.validation。*の実装を見つけることができますか?
- 12. TestStack.Whiteなぜ私はApplication.GetWindowsでウィンドウを見つけることができますが、.GetWindowでは見つけることができませんか?
- 13. なぜSelenium&PhantomJSはタグを見つけることができませんが、Selenium&Chromedriverはタグを見つけることができますか?
- 14. ListOrderedMapを見つけることができませんか?
- 15. .ipa、ここで私はそれを見つけることができます
- 16. ここで私はExt.ux.CheckColumnを見つけることができます
- 17. herokuはCSSを見つけることができません
- 18. はWindowsコマンドレットを見つけることができません
- 19. C++はSQLite3を見つけることができません
- 20. はシンボルクラスKeyEventを見つけることができません
- 21. PHPはクラスファイルを見つけることができません
- 22. Intellijはcommons.dbcp2を見つけることができません
- 23. は、シンボルgetCurrentActivityを見つけることができません
- 24. Javahはkhronos.opengles.GL10を見つけることができません
- 25. リンカーはCTFontCreateWithNameAndOptionsを見つけることができません
- 26. グランタタスクはファントムドライバを見つけることができません
- 27. typescriptはnode_modulesを見つけることができません
- 28. CMakeはGLEWを見つけることができません
- 29. Impalaはcom.mysql.jdbc.Driverを見つけることができません
- 30. PostGISはGDALALLRegisterを見つけることができません
['getifaddrs()'](http://man7.org/linux/man-pages/man3/getifaddrs.3.html)を使用して、インターフェイスとそのIPアドレスのリストを取得します。 –
また、Linux 3.8+では、 'getsockopt()'は 'SO_BINDTODEVICE'オプションをサポートしているので、ソケットがどのインタフェースにバインドされているかも分かります。 –