2016-08-02 28 views
0

this users exampleで使用してルートを取得します。出力例:ルートから送信元アドレスを取得

$ ip route get 4.2.2.1 
4.2.2.1 via 192.168.0.1 dev eth0 src 192.168.0.121 
    cache 
$ 

はのは、以下のようにアドレスを参照してみましょうとして

  • 4.2.2.1アドレスA(宛先)として
  • 192.168.0.1アドレスB(ゲートウェイ)アドレスCとして
  • 192.168.0.121 (源)

私の場合、Cに興味があります - 私はプログラムで同じ情報をどのように入手できるかもしれないかを考えようとしています。具体的に

  • 与えられたアドレスAC
  • が​​か何とかせ、

どれ勧告を好ましいを使用して

  • シェルコマンドを実行するものを使用しないアドレスを見つけます?そこおかげ

  • +0

    何のためにあなたが必要なのでしょうか? Cはeth0のアドレスでなければなりません。それとも、どのインタフェースを経由するかが重要ですか? – mash

    +0

    @mashはい、それは重要です - 私のマシンは複数のインターフェースを持っていますので、どれが使われているか調べたいと思います。 – dtmland

    答えて

    2

    あなたが行く:

    #include <iostream> 
    
    #include "boost/asio/io_service.hpp" 
    #include "boost/asio/ip/address.hpp" 
    #include "boost/asio/ip/udp.hpp" 
    
    boost::asio::ip::address source_address(
        const boost::asio::ip::address& ip_address) { 
        using boost::asio::ip::udp; 
        boost::asio::io_service service; 
        udp::socket socket(service); 
        udp::endpoint endpoint(ip_address, 0); 
        socket.connect(endpoint); 
        return socket.local_endpoint().address(); 
    } 
    
    // Usage example: 
    int main() { 
        auto destination_address = boost::asio::ip::address::from_string("8.8.8.8"); 
        std::cout << "Source ip address: " 
          << source_address(destination_address).to_string() 
          << '\n'; 
    } 
    
    +0

    素晴らしいです。好奇心のために、なぜTCPの代わりにUDPを使うのですか? – dtmland

    +1

    この場合、TCPの機能は必要ありません。 – mash

    関連する問題