経緯
某日本の企業が運営するファイルサーバにEC2からアクセスを試みるも、国外からのアクセスがブロックされているらしく。
で「Elastic IP アドレスを割り当てる」を100回ほど手で繰り返しても、日本のIPアドレスを取得できず。
(ガチャ運なし😂)
といったことがあり、日本のIPを取得するスクリプトを書いた。
スクリプト
- スクリプトに必要なツール
- AWS CLI:
$ sudo apt install awscli
- jq:
$ sudo apt install jq
- AWS CLI:
run.sh
#!/bin/bash
set -e
function ip2Country() {
local ip=$1
local reversed_ip=`echo $ip | awk -F'.' -v OFS='.' '{print $4,$3,$2,$1}'`
# `text = "US"` -> `US`
local country=`nslookup -type=TXT $reversed_ip.cc.wariate.jp | grep -oP 'text\s*=\s*"\K\w+'`
echo $country
}
MAX_TRIES=720 # 最大試行回数
INTERVAL_SECS=120 # 短いと同じIPが連続するので2分くらいにする
tries=0
while [ $tries -lt $MAX_TRIES ]; do
eip_output=`aws ec2 allocate-address --domain vpc`
public_ip=`echo $eip_output | jq -r .PublicIp`
country=`ip2Country $public_ip`
if [ "$country" = "JP" ]; then
echo "IP address [$public_ip] is in Japan (COUNTRY: $country)"
exit 0
else
echo "IP address [$public_ip] (COUNTRY: $country)"
aws ec2 release-address --allocation-id `echo $eip_output | jq -r .AllocationId`
fi
tries=$((tries + 1))
sleep $INTERVAL_SECS
done
echo "Reached max tries without finding a JP IP. Exiting..."
学び: "日本のIP" とは?IPアドレスの国情報について。
①ドメインの登録者の所在国 ≠ ②サーバーの物理的な場所
① whois
コマンドの国コードフィールドで知ることができる。
② cc.wariate.jp
等1のサービスの使って知ることができる。IPアドレスの実際の地理的位置、つまりIPアドレスが使用されている地域や国。
ドメインの登録者の所在国が "JP" であっても、サーバにアクセスできなかったので...。なるほど①と②は別なのね。
補足
-
cc.wariate.jp
サービスの他にも、GeoIPデータベース
を使う方法などあるらしい。 ↩