有没有办法自动和以编程方式下载Microsoft Azure使用的最新IP范围?

时间:2015-03-01 19:25:47

标签: azure

Microsoft提供了一个URL,您可以在其中下载Microsoft Azure使用的公共IP范围。

  

https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653

问题是,有没有办法使用Python或其他脚本自动从该站点下载XML文件?我正在尝试安排任务来获取新的IP范围文件并根据我的防火墙策略进行处理。

4 个答案:

答案 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