使用 C 代码获取与 ifconfig 相同的信息
在 Linux 中是否有一种方法,使用 C 代码来获取与“ifconfig eth0”返回的相同信息?我对 IP 地址、链接状态和 MAC 地址等内容感兴趣。
以下是 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
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
解决此类问题的一种方法是 strace,特别是在没有源代码的情况下。
它为您提供了您传递给它的任何程序所进行的所有系统调用的列表,以及它们的参数和返回值。如果您的程序只是转储一些信息并退出,而不是长时间运行,则可以非常简单地对您看到的所有系统调用执行 man 操作,看起来它们可能会提供您正在寻找的信息。
当我运行时,
一些有趣的调用是:
后面跟着一堆 ioctl,证实了 @payne 的答案:
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:
是的,
ifconfig
本身是用 C 编写的。:) 请参阅:http://cvsweb.netbsd.org/bsdweb.cgi/src/sbin/ifconfig/ifconfig.c?rev=1.169& ;content-type=text/x-cvsweb-markup执行
man netdevice
查看详细信息(在 Linux 上)。您使用ioctl()
系统调用。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.有更简单的方法。复制自 http://man7.org/linux/man-pages/man3 /getifaddrs.3.html
There is simpler approach. copied from http://man7.org/linux/man-pages/man3/getifaddrs.3.html
一种简单的方法是使用 popen 函数,请参阅:
http://pubs.opengroup.org/onlinepubs/009696899/functions/popen.html
使用类似的东西:
One simple way is to use the popen function see:
http://pubs.opengroup.org/onlinepubs/009696899/functions/popen.html
Use something like:
以下是我在代码中获取 MAC 和 MTU 的方法:
Here is how I get MAC and MTU in my code:
用法 :
usage :