netstat/ifconfig 및 ip를 사용할 수 없는 경우 기본 게이트웨이를 얻는 방법은 무엇입니까?

netstat/ifconfig 및 ip를 사용할 수 없는 경우 기본 게이트웨이를 얻는 방법은 무엇입니까?

ip그래서 저는 centos 또는 ubuntu docker 컨테이너를 가지고 있는데 , netstatto 가 없다는 것을 발견했습니다 ifconfig. 추가 패키지를 설치하고 싶지 않습니다. 위 명령 중 어느 것도 작동하지 않으면 기본 게이트웨이를 얻을 수 있는 방법이 있습니까?

PS 컨테이너에서 Docker 호스트에 액세스하는 방법을 알려면 기본 게이트웨이가 필요합니다.

답변1

@dirkt가 언급했듯이 기본 경로 테이블은 모든 최신 Linux 시스템에서 텍스트 형식으로 저장되지만 /proc/net/route불행히도 IP 주소는 (역방향) 16진수로 저장됩니다. Bash 해킹과 도움을 통해 이를 사람이 읽을 수 있는 IP 주소로 변환할 수 있습니다 awk.sed

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 주소는 16진수이고 바이트가 반전되어 있습니다.

답변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

관련 정보