내 PHP 컨테이너의 경우 ide가 수신 대기 중인 IP를 감지해야 하는 경우입니다. 난 달린다:
ip=$(netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10)
게이트웨이 IP를 얻었습니다. 하지만 이를 위해서는 net-tools
PHP 애플리케이션이나 이에 상응하는 애플리케이션을 설치해야 합니다 . 따라서 필요한 기능(게이트웨이 IP 감지)을 직접 구현하고 싶습니다.
netstat
그렇다면 유사한 도구(예를 들어)가 route
라우팅 테이블을 어떻게 읽을 수 있습니까?
내가 아는 한, Linux는 라우팅 테이블을 생성하지만 테이블이 어디에 저장되어 있는지 모릅니다.
답변1
Perl은 간단한 데이터 변환 방법을 제공합니다.
#!/usr/bin/env perl
$s = shift @ARGV or die "One argument expected\n";
@h = reverse unpack("A2A2A2A2", $s);
@i = map { hex($_) } @h;
print +(join ".", @i), "\n";
데이터와 함께 한 줄로 작성하세요.
perl -e '$s=shift @ARGV;@h=reverse unpack"A2A2A2A2",$s;@i=map{hex }@h;print +(join".",@i),"\n"' 010016AC
172.22.0.1
스크립트는 명령줄 인수로 변환할 주소를 사용하고 이를 4개의 2문자 문자열로 압축을 푼 다음 각 2문자를 10진수 값으로 변환하고 쌍 사이에 점 문자를 사용하여 시퀀스를 인쇄합니다.
답변2
netstat
그리고 라우팅 테이블을 파일에서 분리하는 다른 명령도 있습니다 /proc/net/route
.
예를 들어 스크립트를 작성하여 IP를 역순의 16진수 문자열로 인코딩하는 경우 IP를 172.22.0.1
인코딩하는 010016AC
간단한 방법 은 010016AC
IP를 2개의 문자 청크로 분할하여 테이블로 만들고 역순회를 수행하는 것입니다. 반복할 때마다 16진수 문자열을 정수로 변환합니다.
즉, 다음을 수행해야 합니다.
010016AC -> AC160001 -> AC.16.00.01 -> 172.22.0.1
PHP 스크립트의 경우 다음 정규 표현식도 사용했습니다( preg_match
).
/^\w*\s(00000000)\s(\w*)/m
두 번째 일치 항목(그룹 (\w*)
)에는 게이트웨이 IP가 포함됩니다.