/ / Linuxのbashでプログラム的にパブリックIPを検出する-bash、networking、ip

bash、ネットワーキング、ipのLinux上での公的IPの発見

私は必要なことをする投稿を見つけましたが、Windowsでは:

プログラムによるパブリックIPの発見

> tracert -d www.yahoo.com

`Tracing route to www-real.wa1.b.yahoo.com [69.147.76.15]
over a maximum of 30 hops:`

1    <1 ms    <1 ms    <1 ms  192.168.14.203
2     *        *        *     Request timed out.
3     8 ms     8 ms     9 ms  68.85.228.121
4     8 ms     8 ms     9 ms  68.86.165.234
5    10 ms     9 ms     9 ms  68.86.165.237
6    11 ms    10 ms    10 ms  68.86.165.242

The 68.85.228.121 is a Comcast (my provider) router. We can ping that:

ping -r 9 68.85.228.121 -n 1

Pinging 68.85.228.121 with 32 bytes of data:

Reply from 68.85.228.121: bytes=32 time=10ms TTL=253 Route: 66.176.38.51 ->

68.85.228.121 ->

68.85.228.121 ->

192.168.14.203

Voila! The 66.176.38.51 is my public IP.

この(3番目の)回答は、ISPのIPを取得し、pingを使用してIPを取得する方法を示しています。

Linuxでは変更されずに動作しません。tracertの代わりにtracerouteが動作しますが、出力は予測できないため、解析方法はわかりません。

私は

IP="$(traceroute -d www.yahoo.com | grep " 2 " | sed -e "s/.*((.*)).*/1/")"

しかし、grepは(不完全に)ハードコーディングされています。例のようにpingを機能させる方法がわかりませんでした。

どんな入力も感謝します。

回答:

回答№1は4

個人的に、私はこのコマンドを実行しました:

wget -qO- whatismyip.org


回答№2の場合は0

これは信頼できる解決策ではなく、受動的な方法ですこれを行うには、独自のルーターの「WAN」ステータスページをプルするスクリプトを作成します。何度でも実行でき、過度のプロービングについて文句を言う人はいません。


回答№3の場合は0

OK

必要なgrepは次のとおりです。

grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"

以前は、外部IPを見つけるための個人的なソリューションは次のとおりでした。

curl icanhazip.com

現在は次のとおりです。

ISP=`traceroute -M 2 -m 2 8.8.8.8 | grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"` | ping -R -c 1 -t 1 -s 1 $ISP | grep RR | grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" > .extIP

その後

cat .extIP

楽しむ!


回答№4の場合は0

@pizzaの発言を組み合わせました この 答えて、次の作業スクリプトを作成しました。 「tracerouteのようなものを使用するほど良くはありませんが、」それほど複雑ではありません。

   #!/bin/bash
content="$(wget http://checkip.dyndns.org/ -q -O -)"
myip="$(<<< "$content" sed -e "s/.*Current IP Address: //" -e "s/<.*//")"
echo "myip = [${myip}]"

wget コマンドは、dyndnsにIPを要求した結果を取得します。次に、 sed IPアドレスdyndnsが返される前後にすべてを切り取ります。

他の場所で述べたように、dyndnsなどのWebサイトはそのようなリクエストが頻繁に行われる場合はブロックします。ただし、ほとんどの場合、IPはセッションの少なくとも継続期間中は一定のままであるため、数日間ではない場合、このスクリプトを頻繁に実行する必要はありません。


回答№5の場合は0

必要なのがシンプルで、他のサーバー(またはサービス)に依存することを気にしない場合:

dig +short myip.opendns.com @resolver1.opendns.com

それはあなたの住所だけを吐き出します

または、

#!/bin/bash
myip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
echo "myip = [${myip}]"