通信時のソースアドレスを取得する

f:id:dfukunaga:20170417005216p:plain

Linuxです。

なんて言えばよいのかわからなかったのですが、ip route get xxx.xxx.xxx.xxxと打ったときに出てくる ソース(送信元)アドレスをC/C++内で取得したかった。すぐに思いついた方法は、

  • popenを使ってip route getを実行し、標準出力を取得
  • 一時的にソケットを作って送信元IPアドレスを取得

です。以下のようなサンプルコードを書きました。

get route source address

どちらも同じ出力が得られますが、手元の環境で試したところ、 1000回実行するのにかかる時間がpopenを使った方法では約1秒、 ソケットを使った方法では約0.005秒だった。(コードの改善点はあるかもしれませんが。)

他にもっと良い方法があれば教えてください!