所以我有一个 centos 或 ubuntu docker 容器,发现没有ip
, netstat
to ifconfig
。我不想安装任何额外的软件包。如果上述命令均不可用,是否有办法获取默认网关?
PS我需要默认网关才能知道如何从容器访问docker主机。
答案1
正如 @dirkt 提到的,默认路由表在任何现代 Linux 系统上都以文本形式存储/proc/net/route
,但不幸的是 IP 地址以(反向)十六进制存储。通过一些 bash 黑客攻击和 的帮助awk
,sed
我们可以将其转换为人类可读的 IP 地址:
for i in $(echo "$(< /proc/net/route | head -2 | tail -1 | awk '{print $3}')" | sed -E 's/(..)(..)(..)(..)/\4 \3 \2 \1/' ) ; do printf "%d." $((16#$i)); done | sed 's/.$//'
以下是更具可读性(和多行)版本的相同想法:
#!/usr/bin/env bash
get-default-gateway() {
default_route_ip="$(< /proc/net/route | head -2 | tail -1 | awk '{print $3}')"
hex-ip-to-dec-ip "$default_route_ip"
}
hex-ip-to-dec-ip() {
local hex_ip="$1"
for i in $(echo "$hex_ip" | sed -E 's/(..)(..)(..)(..)/\4 \3 \2 \1/' ) ; do
printf "%d." $((16#$i));
done | sed 's/.$//'
}
get-default-gateway
答案2
cat /proc/net/route
为您提供完整的路由表,包括默认网关,就像ip route
.不过,IP 地址是十六进制和字节颠倒的。
答案3
在 CentOS 中,您可以从以下位置获取默认网关详细信息/etc/sysconfig/网络文件
答案4
您可以使用路线命令:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1