IP印刷用のBashスクリプト

IP印刷用のBashスクリプト

実行時に「プライベートIP:XXXX」を表示するbashスクリプトを作成する必要があります。このようなスクリプトをどのように書くのですか?

私も同じことをする必要がありますが、プライベートIPの代わりにパブリックIPを使用する必要があります。

どんなヒントでも役に立ちます。ありがとうございます!

答え1

ipv4にのみ興味があるとします。

#!/bin/bash
 
lanIp="$(ip -4 -o -br addr|awk '$0 ~ /^[we]\w+\s+UP\s+/ {str = gsub("/[1-9][0-9]*", "", $0); print $3}')";
wanIp="$(curl https://ipinfo.io/ip 2>/dev/null)";
 
echo "Your private ip is: ${lanIp}";
echo "Your public ip is: ${wanIp}";

説明する:

最初のコマンドはこのipコマンドを使用してローカルネットワークipv4アドレスを取得し、出力からawkipv4アドレスのみを抽出するように出力をパイプします。

ただし、ip存在する各ネットワークインターフェイスに対して行が表示され、各行の情報は単純なIPアドレス以上です。したがって、非アクティブインターフェイスをフィルタリングしてIPアドレスのみを維持する必要があります。必要に応じておよびを使用してこれらの手順を実行できますが、grepここではそれを使用しました。sedperlawk

awk$0最初のコマンドの出力行全体を正規表現と一致させるために使用され、行に^[we]\w+「e」または「w」で始まる名前が含まれていることを確認します(LinuxのWi-Fiおよびイーサネットネットワークインタフェースはしばしばこのようになります)始まります)。この部分は完全に移植可能ではありませんが、Termuxだけでなく複数のLinuxディストリビューションでも動作します。まだMacやBSDではテストしていません。また、アクティブなネットワークインターフェイスのみが一致するように、インターフェイス名の後に「UP」テキストが続くことを確認します。次に、awk関数を使用してgsub結果からIPアドレスのみを抽出し、それを変数に設定されている標準出力に再印刷しますlanIp

eth0静的に名前付きネットワークインターフェイスがある場合、またはスクリプトにインターフェイス名をハードコードできる場合は、これを簡素化できます。ほとんどの最新のLinuxディストリビューションは半ランダムに生成されたインターフェイス名を使用し、これはWi-Fiまたはイーサネットインターフェイスで動作するため、上記の方法を使用しています。

2 番目のコマンドは、カールを使用して Web サイトから WAN アドレスを取得します。これは、WAN IPを返し、他の出力をカールから/dev/null

関連情報