当我尝试使用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
但我只需要第一个,我该如何过滤掉它。
答案 0 :(得分:2)
您可以使用head
,但......
我当然可能会误会,但我的猜测是你真的不需要第一个。
您可能正在寻找连接到网关(或互联网)的那个。
据我所知,IP地址或接口的顺序是未指定。
您想要达到什么目标?
如果您想知道哪个接口“连接到互联网”,更可靠的方法是找到具有默认路由的接口(使用route
)然后使用ifconfig <interface>
直接获取正确的IP地址。
答案 1 :(得分:1)
您可以减少grep
和head
ifconfig -a | sed -nr -e '/inet\b/{s|^.*inet\s+addr:(.[^ \t]*).*|\1|;h}' -e '${x;p}'
答案 2 :(得分:0)
请勿查看所有适配器,只需要查看所需的适配器。
system( "ifconfig -a eth0 | grep inet | "
"sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
" > address.txt" ) ;
答案 3 :(得分:0)
我使用iproute2
的{{1}}:
ip
(不仅因为它更容易解析,而且还会显示例如辅助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
不能。)
答案 4 :(得分:0)
如果ifconfig
或ip
的输出发生变化,您的程序就会中断。
为什么不直接使用SIOCGIFCONF
ioctl()
并直接从来源获取?
ETA:假设任何给定的系统只有一个环回接口和一个只有一个地址的以太网,这也是不安全的。
答案 5 :(得分:0)
'ifconfig eth0'怎么样?