成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在命令行快速獲取公網動態 IP 地址

系統 Linux
如何獲取當前運營商分配的公網 IP地址呢?除了問路由器外(打開路由器管理界面找到 WAN 口信息)我們還可以通過一些網絡服務進行檢測。

如何確定公網IP地址是一個讓很多家用寬帶朋友們經常遇到的問題,畢竟固定IP地址總是價格不菲因而不適用于家庭寬帶,而我們的電信寬帶運營商(ISP)往往給我們分配的是動態IP地址,之所以稱作為動態IP地址,是因為每次撥號得到的IP地址可能會不一樣,還有更騷的操作就是有的運營商每天或不定期在某個時間刷新IP地址池,這樣已經獲得的IP地址將會被強制釋放并分配新的IP地址。

這對于我們一些運行在家用帶寬下的服務帶來了影響——需要重新設置服務端 IP 地址,比如監控、網絡存儲等等,這時候 DDNS 就發揮作用的,現在大部分路由器內置了 DDNS 客戶端,比如花生殼等服務客戶端,但是這些客戶端存在收費、不穩定以及刷新間隔小等問題,對于自己有域名的朋友可以使用 DNS 服務商的 API 自己實現 IP 更新操作,比如阿里云(Aliyun)、Cloudflare 均可以實現。

對于 DDNS 如何使用 API 更新不在本文敘述范圍內,但調用 API 有個關鍵參數那就是公網IP地址,如何獲取當前運營商分配的公網 IP地址呢?除了問路由器外(打開路由器管理界面找到 WAN 口信息)我們還可以通過一些網絡服務進行檢測。

1. 使用 Shell 命令獲取公網 IP 地址

瀏覽器方式

如果我們使用瀏覽器打開這個地址checkip.amazonaws.com你就會發現你的公網IP地址赫然在目,互聯網上的服務器總是能夠知道是什么 IP地址的客戶端發起了連接,當然就可以通過這種方式獲取公網 IP,同樣功能的網站有很多,這里列舉部分我收集到的:?

https://checkip.amazonaws.com
https://api.ipify.org
https://ifconfig.me/ip
https://icanhazip.com
https://ipinfo.io/ip
https://ipecho.net/plain
https://checkipv4.dedyn.io

cURL 方式

在命令行下我們當然不能為這點小事隨便啟動瀏覽器,我們可以請出另外一個功能強大的工具,那就是curl,cURL 是一個利用URL語法在命令行下工作的文件傳輸工具,關于cURL的快速用法可以參考阮一峰的網絡日志《curl 的用法指南》,這里不再詳述,最簡單的用法就是curl 你要請求的網址,比如curl checkip.amazonaws.com。

使用 dig 命令

首次在別人腳本中看到這個方式獲取公網IP覺得比較新奇,命令如下:

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

這個是由OpenDNS提供的服務,如果你的主機上沒有安裝dig命令,對于Debian系列系統可以通過apt-get install dnsutils安裝,這個命令的原理是指定resolver1.opendns.com為域名myip.opendns.com的解析服務器,為什么要指定,主要是避免 DNS 下游服務器緩存,另外這個指定的解析服務器被 OpenDNS 進行了特殊配置,其始終將域名myip.opendns.com解析為發起 DNS 請求的客戶端 IP 地址,這樣也就實現了查找公網 IP的功能。

這個和 cURL 方式比有什么優勢呢?當然是數據量更小傳輸更快,畢竟使用 cURL 發起 HTTP 請求必然會導致協議頭等無關信息的交換,如果啟用了 HTTPS/TLS 那么還要進行加密協商,效率會比較低,當然這種方式的缺點就是 DNS 查詢容易被運營商審計和過濾,穩定性略差,不過我測試下來除了偶爾查詢失敗外其余情況是完全 OK 的。

2. 使用 Shell 腳本獲取公網 IP 地址

至此我有個新的主意,那就是首先采用 dig 命令快速檢索公網 IP 地址,如果失敗則切換到 cURL 的方式,為了避免 cURL 單一服務器失敗,采用輪詢或者隨機的方式,盡可能提高成功率。

使用 Bash Shell 腳本 do it,比如獲取公網 IPv4 的腳本如下:

#!/bin/bash
# This script try to ensure gets the current IP address (as assigned by the ISP) from
# OpenDNS and other online services as fallbacks
hosts=("checkip.amazonaws.com" "api.ipify.org" "ifconfig.me/ip" "icanhazip.com" "ipinfo.io/ip" "ipecho.net/plain" "checkipv4.dedyn.io")
CURL=`which curl`
DIG=`which dig`
check=$($DIG +short myip.opendns.com @resolver1.opendns.com A)
if [ ! $? -eq 0 ] || [ -z "$check" ] || [[ ! $check =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Unable to get your public IP address by OpenDNS service, try to another way."
count=${#hosts[@]}
while [ -z "$check" ] && [[ $count -ne 0 ]]; do
selectedhost=${hosts[ $RANDOM % ${#hosts[@]} ]}
check=$($CURL -4s https://$selectedhost | grep '[^[:blank:]]') && {
if [ -n "$check" ] && [[ $check =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
break
else
check=""
count=$(expr $count - 1)
echo "The host $selectedhost returned an invalid IP address."
fi
} || {
check=""
count=$(expr $count - 1)
echo "The host $selectedhost did not respond."
}
done
fi
if [ -z "$check" ]; then
echo "Unable to get your public IP address. Please check your internet connection."
exit 1
fi
echo "Your public IP address is $check"
exit 0

上述腳本可以看出首先我使用 dig 方式查詢 OpenDNS,如果查詢失敗或者返回為空或者不是 IP 地址,那么進入cURL模式,這里將可用服務器添加到 hosts 列表,并且隨機抽取一個進行cURL,這里使用了curl -4s參數-4s分別表示僅使用 IPv4 方式連接(確保獲取 IPv4 地址)和抑制進度條和錯誤信息,如果抽取的服務發生錯誤,那么進入循環再抽取一個,直到循環滿最大 hosts 數停止。

3. 總結

大部分腳本甚至一些程序僅使用了一種方式獲取公網 IP,但是互聯網上這些服務往往是不可靠的,如果你所選用的服務出現故障,那么將會影響到你后續業務的開展,所以本文的核心思想還是多個備份,另外對于 cURL 方式采用隨機確保所謂的“負載平衡”,避免 fallback 時過度請求某個服務導致 IP 被 Ban。

責任編輯:龐桂玉 來源: 奇妙的Linux世界
相關推薦

2017-08-29 15:15:40

Linux命令公網IP

2022-10-14 19:30:29

Linux

2020-12-10 16:16:08

工具代碼開發

2020-12-11 06:44:16

命令行工具開發

2019-08-15 15:00:31

Linux命令行PDF

2019-07-23 13:45:38

LinuxFedora權限

2023-08-12 11:40:11

命令行生存

2014-05-04 10:58:18

Linux命令行Linux發行版

2018-04-25 10:46:05

Linux命令行日歷

2022-10-13 19:23:21

Linux命令行IP 地址

2022-10-20 16:51:44

Linux命令行IP 地址

2023-02-07 09:49:26

Linux命令行合并文件

2022-10-18 14:52:36

2022-04-01 12:51:44

命令Containerd

2018-03-29 15:58:55

Linux命令行編輯器

2019-08-05 12:20:30

命令行Linux權限進階

2022-11-18 12:47:51

LinuxAWS命令行工具

2019-04-12 15:25:15

Fedora 30內核命令行

2015-10-19 17:16:10

天氣預報命令行Linux

2014-09-16 10:09:40

Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日操日日舔 | 久久免费观看一级毛片 | 精品亚洲一区二区 | 亚洲欧美一区二区三区在线 | 91精品久久久久久久 | 久久一二区 | 四虎影院新网址 | 国产高清视频一区 | 激情91| 久久国产精品免费一区二区三区 | 欧美三级视频在线观看 | 手机在线观看 | 国产韩国精品一区二区三区 | 国产精品日本一区二区在线播放 | 欧美不卡视频一区发布 | 成人午夜精品 | 精品亚洲一区二区 | 91九色porny首页最多播放 | 视频国产一区 | 一级毛片观看 | 古典武侠第一页久久777 | 国产伦精品一区二区 | 久久成人免费 | 日韩在线大片 | 精品国产乱码久久久久久88av | 91精品国产91久久久久久吃药 | 日韩视频一区二区在线 | 九九九视频精品 | а_天堂中文最新版地址 | 国产精品日本一区二区在线播放 | 国产乱码高清区二区三区在线 | 亚洲精品乱码久久久久久黑人 | 99综合| 久久久久国产精品一区二区 | 精品二区视频 | 色爱区综合 | 日韩中文字幕在线观看 | 日韩资源 | 国产亚洲精品久久久久久牛牛 | 国产视频一区二区在线观看 | 亚洲精品大全 |