Get local network interface addresses using only proc?
- by Matt Joiner
How can I obtain the (IPv4) addresses for all network interfaces using only proc? After some extensive investigation I've discovered the following:
ifconfig makes use of SIOCGIFADDR, which requires open sockets and advance knowledge of all the interface names. It also isn't documented in any manual pages on Linux.
proc contains /proc/net/dev, but this is a list of interface statistics.
proc contains /proc/net/if_inet6, which is exactly what I need but for IPv6.
Generally interfaces are easy to find in proc, but actual addresses are very rarely used except where explicitly part of some connection.
There's a system call called getifaddrs, which is very much a "magical" function you'd expect to see in Windows. It's also implemented on BSD. However it's not very text-oriented, which makes it difficult to use from non-C languages.