MasaのITC Life

夢は起業家!全てにおいて凡人だけど頑張ることだけはいっちょ前!

プログラミング

【C言語】ioctlを使わずにIPv6を取得し標準出力させる方法

投稿日:2020年2月22日 更新日:



今回は保有するインタフェースの

IPv6を取得して標準出力させてみます。



インタフェースを操作するための

ioctlシステムコールを使うことで、

指定したインタフェースに割り当てられた

IPv4アドレスを容易に取得出来ます。



ioctlでIPv6アドレスも取得出来ますが、

少し複雑なので、ioctlを使わないで

取得してそれを標準出力していきます。



/proc/net/if_inet6
にホストが保有する

インタフェースに割り当てられた

IPv6アドレスが保存されています。



実際に見てみましょう。

cat /proc/net/if_inet6 と叩きます。

次のように表示されました。


xxdコマンドでダンプすると次のようになります。

xxd /proc/net/if_inet6





ここで if_inet6 についてもう少し掘り下げてみます。

if_inet6のフォーマット


1行が各インタフェースに関する情報です。



まず1行目に関して、

"アドレス" "01" "80" "10" "80" "lo"

と5つのパートから構成されています。


各値に関して以下の意味があります。


アドレス:IPv6 Address
01:Interface Index
80:Prefix Length
10:Scope Value
80:Interface Flag
lo:Device Name


プレフィックスやスコープに関しては、

IPv6アドレスの概念の1つです。



インデックスはソケットプログラミングを

経験したことがある方は分かると思いますが、

bind()をするために、必要な情報です。




今回必要な情報は、

IPv6アドレスとデバイス名です。


Cで/proc/net/if_inet6からIPv6アドレスを取得する



コードはこちらです。



これを実行すると次のようになります。



しっかりと表示出来ていますね。

ちなみに lo はループバックアドレスで

eth1 はリンクローカルアドレスを表してます。



最後まで読んでいただきありがとうございました。


-プログラミング

Copyright© MasaのITC Life , 2023 All Rights Reserved Powered by STINGER.