내 라우팅 테이블에는 IP 주소 목록과 함께 긴 규칙 세트가 있습니다. CSV 데이터와 유사한 출력을 얻고 싶습니다. 여기서 첫 번째 열은 원래 목록의 IP 주소이고, 두 번째 열은 라우팅 테이블의 현재 규칙을 기반으로 해당 IP에 연결하는 데 사용되는 게이트웨이입니다. 세 번째 열은 연결에 사용될 장치입니다.
경로 데이터를 가져오고 그렇게 하기 위한 스크립트 작성을 잠시 고려했지만 route -n
서브넷 계산을 수행하는 함수를 생각하는 과정에서 이 특정 바퀴가 발명되었을 수도 있고 이미 어딘가에 존재한다는 생각을 지울 수 없었습니다. 에.
내가 원하는 것을 어떤 명령으로 달성할 수 있는지 아는 사람이 있나요?
답변1
이를 사용하여 ip route get
컴퓨터가 IP로 라우팅하는 방법을 결정할 수 있습니다. 따라서 파일에 IP 목록이 한 줄에 하나씩 있으면 다음을 수행할 수 있습니다.
while read -r addr; do
gw="$(ip route get "$addr" | awk '/via/ {print $3}')"
if [[ -z $gw ]]; then
printf 'No route for %s\n' "$addr" >&2
else
printf '%s,%s\n' "$addr" "$gw"
fi
done < ip_list
이런, 개발자를 제공하는 것을 잊어버렸습니다. 해결 방법은 다음과 같습니다.
while read -r addr; do
ip route get "$addr" | awk -va="$addr" '/via/ {print a "," $3 "," $5} $2 == "dev" {print a ",," $3}'
done < ip_list