題 Ping服務器/域並在Linux上捕獲其IP


使用Windows,即使沒有收到回复,您也可以ping給定的域名並將IP捕獲為變量。我相信命令看起來像這樣:

ping domain.com
for /f "tokens=1,2 delims=[]" %%A in ('ping /n 1 /w 1 domain.com ^| find "Pinging"') do set ipaddress=%%B"`

這基本上就是我想要做的,但是在bash腳本而不是批處理文件中。我偶然發現了很多非常接近的問題,但並不是我想要的。我似乎無法找出解決這個問題的最佳方法。

有任何想法嗎?


5
2018-06-02 02:40


起源




答案:


這應該可以在命令行或腳本中使用:

ip=$(ping -c 1 www.google.com | gawk -F'[()]' '/PING/{print $2}')
echo $ip
173.194.34.19

說明

首先是輸出 ping 正在解析的命令:

$ ping -c 1 www.google.com
PING www.google.com (173.194.40.209) 56(84) bytes of data.
64 bytes from par10s12-in-f17.1e100.net (173.194.40.209): icmp_req=1 ttl=52 time=49.8 ms

--- www.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 49.874/49.874/49.874/0.000 ms
  • ip=$(COMMAND) :分配輸出 COMMAND 到變量 $ip
  • ping -c 1 www.google.com :ping谷歌,一次。
  • gawk 是一種功能強大的腳本語言,可逐行處理輸入,逐字段處理輸入。
  • -F'[()]' : -F 套 gawk字段分隔符。在這裡,我們將它設置為一個角色類([ ]),特別是打開和關閉括號。這意味著一切都要到第一個 ) 要么 ( 將成為第一個領域 gawk 是 $1。我們只對第一行感興趣,所以我們告訴你 gawk 打印第二個字段($2),這是IP, 只要 如果當前行包含“PING”(/PING/)。

所以,整個shebang的結果被保存為 ip 你可以將其稱為 $ip


10
2018-06-02 03:07



美麗!正是我在尋找的東西。謝謝 - ICE
@Jim你可以替換 gawk 同 awk 使其稍微便攜一些。 gawk 可能不會安裝在某些UNIX上但是 awk 應該永遠在那裡。 - terdon
它就像一個魅力!我嘗試使用nslookup的另一種方法是將所有ips捕獲為單個變量。它奏效了,但我只需要第一個。再次感謝你的幫助!現在我可以繼續我的腳本了! XD - ICE
這很優雅 - 我用它來獲取IP地址 docker.for.mac.localhost 所以我可以將scality / s3server與boto3一起使用,並防止我的模擬s3思考 docker.for.mac 是我的桶名。 - AlienWebguy