Bashスクリプトからシステムの地理的位置を取得する方法
オープンAPIと単純なbashスクリプトを使用して、リモートLinuxシステムの地理的位置を見つけることができます。サーバーを地理的な場所に配置すると、物理的な世界で追跡するのに役立ち、サーバーを地域のホットスポットに配置できます。.
インターネット上の各サーバーには、パブリックIPアドレスがあります。これはサーバーに直接割り当てられるか、またはそのサーバーにトラフィックを送信するルーターに割り当てられます。 IPアドレスは、そのサーバーが世界中のどこに位置しているかについての手がかりを与えてくれます。 ipinfo.coとIP Vigilanteが提供する2つのオープンAPIを介してこの地理位置情報データを取得し、それを使用してサーバーまたは他のリモートシステムに関連付けられている市、州、および国を確認できます。これはあなたに正確なGPS位置を与えません。それだけであなたはIPアドレスの一般的な領域を見ることができます.
リモートシステムに接続する
Linuxサーバー、またはジオロケーションを作成したい他のリモートシステム上で次のコマンドを実行するので、まずサーバーに接続してその上のシェルにアクセスする必要があります。たとえば、SSH経由で接続するとします。ローカルシステム上でコマンドを実行してその場所を見つけることができますが、おそらくあなたはすでに自分のいる場所を知っているでしょう。!
curlとjqをインストール
位置情報APIにアクセスするには2つのツールが必要です。 カール
HTTPリクエストを送信する jq
返されたJSONデータを処理します。端末を開いて使用する apt-get
これらのツールをUbuntuまたはDebianベースのシステムにインストールするため。他のLinuxディストリビューションでは、代わりにLinuxディストリビューションのパッケージインストールツールを使用してください。.
sudo apt-get install curl jq
サーバーのパブリックIPアドレスを探す
地理位置情報データを取得するには、サーバーのパブリックIPアドレスも必要です。つかいます カール
端末ウィンドウでipinfo.ioをAPI呼び出しする.
https://ipinfo.io/ipをカールします。
APIから位置データを取得する
サーバーのパブリックIPを取得したので、次に、ipvigilante.comのAPIを呼び出して位置情報データを取得します。交換する 前のコマンドで戻ってきたアドレス.
https://ipvigilante.com/をカールします。
この呼び出しから返されるデータを詳しく見てみましょう。
APIは、私たちのサーバーがある都市、国、そして大陸を返します。対話型の地図上にこのサーバーを描画したい場合には、おおよその緯度と経度の座標も返されます。スクリプトでは、「緯度」、「経度」、「city_name」、および「country_name」を使用します。の jq
コマンドは、APIデータを処理し、これら4つのフィールドを抽出する方法を理解しています。.
API呼び出しを自動化するためのスクリプトの作成
位置情報データを取得してCSV形式のファイルに書き込むスクリプトを作成できます。データはというファイルに書き込まれます。 server_location.txt
の中に / tmp /
ディレクトリ。お気に入りのエディタを開き、という名前のスクリプトを作成します。 geolocate.sh
. 以下に示すスクリプトの内容を挿入し、必ずIPアドレスを自分のものに置き換えてください。
#!/ bin / sh OUTPUT_FILE = / tmp / server_location.txt#このサーバーのパブリックIPアドレスを取得しますPUBLIC_IP = "curl -s https://ipinfo.io/ip"#geolocation APIを呼び出して出力curlを取得します-s https ://ipvigilante.com/$ PUBLIC_IP | \ jq '.data.latitude、.data.longitude、.data.city_name、.data.country_name' | \ while -r LATITUDEを読みます。 -r LONGITUDE読み取り-r CITY読み取り-r COUNTRY echo "$ LATITUDE、$ LONGITUDE、$ CITY、$ COUNTRY" | echo \ tr --delete \ "> \ $ OUTPUT_FILE完了
スクリプトを保存して端末に戻ります。このファイルに対する実行権限を付与して、スクリプトを端末から実行可能にします。.
chmod u + x geolocate.sh
これでテストする準備が整いました。実行します geolocate.sh
スクリプトを作成し、出力ファイルの内容を確認します。
./geolocate.sh cat /tmp/server_location.txt
Cronジョブを使用した1日1回の地理位置情報データの更新
サーバーに地理位置情報を更新させて1日に1回ファイルに保存させるためのcronジョブを作成しましょう。毎日のcronジョブは以下のファイルを更新します。 server_location.txt
の中に / tmp /
サーバーのフォルダ。 24時間のcronジョブを作成するのは、私たちのスクリプトを /etc/cron.daily
ディレクトリ。パーミッションの問題を回避するために、sudoコマンドを使用してファイルをrootユーザーとしてコピーする必要があります。次のコマンドを実行してコピーします geolocate.sh
に /etc/cron.daily
ディレクトリ.
sudo cp geolocate.sh /etc/cron.daily
これらの変更は即座に行われ、私たちのスクリプトは24時間ごとに実行されて、の内容を更新します。 /tmp/server_location.txt
ファイル。このデータを使用して、サーバーを地図上にプロットしたり、地理的位置とトラフィックログを組み合わせてサーバーのホットスポットが世界のどこにあるかを確認したりするなど、興味深いことを実行できます。.