私の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";
データと一緒に1行で書いてください。
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
2番目の一致(グループ(\w*)
)にはゲートウェイIPが含まれます。