Is there a way in Linux, using C code, to get the same information that "ifconfig eth0" would return? I'm interested in things like IP address, link status, and MAC address.
Here's sample output from ifconfig:
eth0 Link encap:Ethernet HWaddr 00:0F:20:CF:8B:42
inet addr:217.149.127.10 Bcast:217.149.127.63 Mask:255.255.255.192
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2472694671 errors:1 dropped:0 overruns:0 frame:0
TX packets:44641779 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1761467179 (1679.8 Mb) TX bytes:2870928587 (2737.9 Mb)
Interrupt:28
Here is how I get MAC and MTU in my code:
One way to get to the bottom of problems like this, particularly in cases when you don't have source, is strace.
It gives you a list of all the system calls made by any program you pass it, along with their arguments and return values. If your program just dumps some info and quits rather than running for an extended time it can be pretty straightforward to just do a man on all the system calls you see that look like they might provide the info you're looking for.
When I run
Some of the interesting calls are:
followed by a bunch of ioctls, corroborating @payne's answer:
There is simpler approach. copied from http://man7.org/linux/man-pages/man3/getifaddrs.3.html
usage :
One simple way is to use the popen function see: http://pubs.opengroup.org/onlinepubs/009696899/functions/popen.html
Use something like:
Yes,
ifconfig
itself is written in C. :) See: http://cvsweb.netbsd.org/bsdweb.cgi/src/sbin/ifconfig/ifconfig.c?rev=1.169&content-type=text/x-cvsweb-markupDo
man netdevice
to see the details (on Linux). You use theioctl()
system call.