当我尝试ifconfig它给了我整个所有的信息有关的网络适配器.
我试探着:
system( "ifconfig -a | grep inet | "
"sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
" > address.txt" ) ;
字符串
输出两个IP:
inet addr:17.24.17.229
inet addr:127.0.0.1
型
但是我只需要第一个,我怎么才能过滤掉这个。
8条答案
按热度按时间raogr8fs1#
您可以使用
head
,但是...当然,我可能弄错了,但我的猜测是,你并不真的需要第一个。
您可能正在查找连接到网关(或Internet)的主机。
据我所知,IP地址或接口的顺序是未指定的。
你到底想达到什么目的?
如果您想知道哪个接口“连接到互联网”,更可靠的方法是找到具有默认路由的接口(使用
route
),然后使用ifconfig <interface>
直接获得正确的IP地址。yk9xbfzb2#
您可以减少
grep
和head
的使用字符串
mm5n2pyu3#
我会使用
iproute2
的ip
:字符串
(Not只是因为它更容易解析,但它也会显示例如辅助IP,这是
ifconfig
不能的。6xfqseft4#
不要看所有的适配器,只要你想要的。
字符串
r3i60tvu5#
如果
ifconfig
或ip
的输出发生变化,程序将中断。为什么不直接使用
SIOCGIFCONF
ioctl()
并从源代码获取它呢?ETA:假设任何给定的系统只有一个以太网接口和一个以太网地址也是不安全的。
clj7thdc6#
ifconfig eth0怎么样?
qqrboqgw7#
第一个月
n9vozmp48#
要在Linux中获取单个接口(
eth0
)的IP地址,请执行以下操作:ip address show dev eth0
个您可以使用IP正则表达式通过grep进行管道传输,并仅选择找到的第一个地址:
ip a show dev eth0 | grep -oP '(?:\b\.?(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){4}' | head -1
个此设备可能有多个IP地址与之关联,因此您可能必须根据您想要选择的地址调整
| head -1
位。您还必须过滤掉广播地址。