Microsoft提供了一个URL,您可以在其中下载Microsoft Azure使用的公共IP范围。
https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653
问题是,有没有办法使用Python或其他脚本自动从该站点下载XML文件?我正在尝试安排任务来获取新的IP范围文件并根据我的防火墙策略进行处理。
答案 0 :(得分:1)
如果您可以在文本编辑器中使用wget
写入并将其另存为scriptNameYouWant.sh
,则会为您提供一个bash脚本,可以下载您想要的xml文件。
#! /bin/bash
wget http://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_21050223.xml
当然,您可以直接从终端运行命令并获得准确的结果。
如果你想使用Python,一种方法是:
再次,在文本编辑器中写入并保存为scriptNameYouWant.py
以下内容:
import urllib2
page = urllib2.urlopen("http://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_21050223.xml").read()
f = open("xmlNameYouWant.xml", "w")
f.write(str(page))
f.close()
我对python或bash不太好,所以我猜在python或bash中都有一种更优雅的方式。
修改
尽管动态网址使用curl
,您仍然可以获得xml。对我有用的是:
#! /bin/bash
FIRSTLONGPART="http://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_"
INITIALURL="http://www.microsoft.com/EN-US/DOWNLOAD/confirmation.aspx?id=41653"
OUT="$(curl -s $INITIALURL | grep -o -P '(?<='$FIRSTLONGPART').*(?=.xml")'|tail -1)"
wget -nv $FIRSTLONGPART$OUT".xml"
同样,我确信有更优雅的方式来做到这一点。
答案 1 :(得分:0)
当我意识到Microsoft页仅在加载到浏览器中时才能通过JavaScript运行时,才发现了这个问题。这使得通过Curl实现的自动化几乎无法使用;更新发生时,我不是手动下载此文件。取而代之的是,IO提出了对我来说效果很好的Bash“单线”。
首先,让我们这样定义基本网址:
MICROSOFT_IP_RANGES_URL="https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653"
现在只需运行此Curl命令(该命令将使用几个链接的Greps解析返回的网页HTML)即可,如下所示:
curl -Lfs "${MICROSOFT_IP_RANGES_URL}" | grep -Eoi '<a [^>]+>' | grep -Eo 'href="[^\"]+"' | grep "download.microsoft.com/download/" | grep -m 1 -Eo '(http|https)://[^"]+'
返回的输出是一个非常干净的最终URL,如下所示:
https://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_20181224.xml
完全是一个人,需要它来自动直接下载该XML文件。然后,如果您需要将该值分配给URL,只需将其包装在$()
中,如下所示:
MICROSOFT_IP_RANGES_URL_FINAL=$(curl -Lfs "${MICROSOFT_IP_RANGES_URL}" | grep -Eoi '<a [^>]+>' | grep -Eo 'href="[^\"]+"' | grep "download.microsoft.com/download/" | grep -m 1 -Eo '(http|https)://[^"]+')
然后通过$MICROSOFT_IP_RANGES_URL_FINAL
访问该URL,然后就可以了。
答案 2 :(得分:0)
这里是获取JSON文件的URL的唯一代码:
$ curl -sS https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519 | egrep -o 'https://download.*?\.json' | uniq
答案 3 :(得分:0)
我稍微增强了最后一个响应,我可以下载 JSON 文件:
#! /bin/bash
download_link=$(curl -sS https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519 | egrep -o 'https://download.*?\.json' | uniq | grep -v refresh)
if [ $? -eq 0 ]
then
wget $download_link ; echo "Latest file downloaded"
else
echo "Download failed"
fi