Linux/C:从设备名获取ip地址?

Linux/C:从设备名获取ip地址?,c,linux,ip,ip-address,C,Linux,Ip,Ip Address,可能重复: 如何从设备名称(例如:eth0)获取ip地址 或 还是过时 ifconfig eth0 这是一个问题或serverfault.com 或 还是过时 ifconfig eth0 这是一个问题或serverfault.com免责声明:您的应用程序不应依赖此类信息。应用程序必须仅查看和使用IP地址。以太网设备是操作系统管道。请记住,您的IP地址可能未与任何设备关联,或者设备具有多个IP地址、多个协议(IPv4、IPv6)等。如果应用程序确实希望使用与以太网设备名称关联的IP地址,请重

可能重复:

如何从设备名称(例如:eth0)获取ip地址

还是过时

ifconfig eth0
这是一个问题或serverfault.com

还是过时

ifconfig eth0

这是一个问题或serverfault.com

免责声明:您的应用程序不应依赖此类信息。应用程序必须仅查看和使用IP地址。以太网设备是操作系统管道。请记住,您的IP地址可能未与任何设备关联,或者设备具有多个IP地址、多个协议(IPv4、IPv6)等。如果应用程序确实希望使用与以太网设备名称关联的IP地址,请重新检查应用程序的设计


如果仍要关联IP地址和以太网设备名称,请检查GetIFADRS(3),它是netlink(7)内核套接字的简单前端。

免责声明:您的应用程序不应依赖此类信息。应用程序必须仅查看和使用IP地址。以太网设备是操作系统管道。请记住,您的IP地址可能未与任何设备关联,或者设备具有多个IP地址、多个协议(IPv4、IPv6)等。如果应用程序确实希望使用与以太网设备名称关联的IP地址,请重新检查应用程序的设计


如果您仍然想关联IP地址和以太网设备名称,请检查GetIFADRS(3),它是netlink(7)内核套接字的简单前端。

查看。如果需要在C程序中使用结果,可以使用
system(yourCommand)
,然后使用
fopen()
stdout读取结果。

查看。如果需要在C程序中使用结果,可以使用
system(yourCommand)
然后使用
fopen()
stdout来读取结果。

看看这个问题:pcap\u lookupnet()将为您提供IPV4所需的功能。否则,我建议只从ifconfig源复制。这里已经给出了答案:特别是对于IPv6,每个接口可以有多个IP地址,因此这个问题需要一些修改。看看这个问题:pcap_lookupnet()将为您提供IPV4所需的内容。否则,我建议从ifconfig源代码复制。这里已经给出了答案:特别是对于IPv6,每个接口可以有多个IP地址,因此这个问题需要进行一些修改。由于作者将其标记为“c”,这实际上对于stackoverflow.com是足够的,对于serverfault.com是不够的(用于系统和网络管理问题)。请求者询问了一个基于c的解决方案。基于shell的响应将起作用,但他必须通过管道发送到ifconfig等。由于作者将其标记为“c”,这实际上对于stackoverflow.com来说是足够的,对于serverfault.com来说是不够的(用于系统和网络管理问题)。请求者询问了一个基于c的解决方案。基于shell的响应会起作用,但他必须通过管道发送到ifconfig等。在某些情况下,指定设备名称而不是IP会有很大帮助,特别是当应用程序从一台服务器移动到另一台服务器时,IP不同,但预期的NIC名称始终相同。
getifaddrs
很好。免责声明错误。大多数应用程序不应该使用接口名称。有些应用程序设计为与网络堆栈密切相关,绝对应该(去读)@VladLazarenko这仍然是错误的问题解决方案。我猜您使用它来确定绑定()和侦听()的地址,对吗?在这种情况下,您应该将()绑定到通配符地址(INADDR_ANY),允许用户手动配置地址,或使用DNS确定应绑定的地址。您假设一个eth设备始终有一个且只有一个地址,并且用户永远不需要绑定到任何界面中未列出的地址。这两种假设都是错误的。@BenVoigt dnsmask不是您的普通用户应用程序n、 您知道,dnsmask几乎处于“操作系统管道”状态我在回答中提到过。显然,为网络堆栈提供服务的应用程序必须超越IP地址。根据我的经验,当普通程序员试图将IP地址与网络设备相关联时,他们的应用程序存在设计问题。@VladLazarenko,我给了你三个选项,当然其中一个是Inadr_ANY,不会e适用于所有情况。对于这些情况,应使用其他两种选择。你明白吗?请不要发表你的个人观点,小心猜测你不认识的人的经历。此外,你否决我答案的理由是愚蠢的。你只是不同意我说的一件事,不能提供公正的理由在某些情况下,应用程序指定设备名而不是IP非常有帮助,特别是当应用程序从一台服务器移动到另一台服务器时,IP不同,但预期的NIC名称始终相同。
getifaddrs
good。免责声明错误。大多数应用程序不应使用接口名称。有些应用程序是专门设计的为了熟悉网络堆栈,绝对应该(去读)@VladLazarenko这仍然是问题的错误解决方案。我猜您是在用它来确定绑定()和侦听()的地址,对吗?在这种情况下,您应该将()绑定到通配符地址(INADDR_ANY),允许用户手动配置地址,或使用DNS确定应绑定的地址。您假设一个eth设备始终有一个且只有一个地址,并且用户永远不需要绑定到任何界面中未列出的地址。这两种假设都是错误的。@BenVoigt dnsmask不是您的普通用户应用程序n、 您知道,dnsmask几乎处于我在回答中提到的“操作系统管道”中。显然,服务于网络的应用程序
ifconfig eth0