2

当我尝试 ifconfig 时,它为我提供了有关网络适配器的全部信息。

我试过 :

system( "ifconfig -a | grep inet | "
          "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
          " > address.txt" ) ;

输出两个 Ips :

  inet  addr:17.24.17.229
  inet  addr:127.0.0.1

但我只需要第一个,我该如何过滤掉它。

4

6 回答 6

2

您可能会使用head但...

当然,我可能会弄错,但我的猜测是你并不真的需要一个。

您可能正在寻找连接到网关(或 Internet)的网关。

据我所知,IP 地址或接口的顺序是未指定的。

你到底想达到什么目的?

如果你想知道哪个接口“连接到互联网”,更可靠的方法是找到具有默认路由的接口(使用route),然后使用ifconfig <interface>直接获取正确的 IP 地址。

于 2010-10-22T15:05:26.983 回答
1

你可以减少使用grephead

ifconfig -a | sed -nr -e '/inet\b/{s|^.*inet\s+addr:(.[^ \t]*).*|\1|;h}' -e '${x;p}'
于 2010-10-22T15:50:30.953 回答
1

我会使用iproute2's ip

ip -o addr show dev eth0 | while read IFNUM IFNAME ADDRTYPE ADDR REST; do [ "$ADDRTYPE" == "inet" ] && echo $ADDR; done
9.87.65.43/21

(不仅因为它更容易解析,而且它还会显示例如辅助 IP,而它ifconfig不能。)

于 2010-10-22T16:05:44.417 回答
0

不要看所有的适配器,只看你想要的。

system( "ifconfig -a eth0 | grep inet | "
          "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
          " > address.txt" ) ;
于 2010-10-22T15:08:49.710 回答
0

如果输出ifconfigip曾经更改,您的程序将中断。

为什么不直接使用SIOCGIFCONF ioctl()并直接从源代码获取呢?

ETA:假设任何给定的系统将只有一个环回接口和一个具有单一地址的以太网也是不安全的。

于 2010-10-22T16:34:26.107 回答
0

'ifconfig eth0'怎么样?

于 2010-10-22T17:09:59.140 回答