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

nic*_*lee 7 azure

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

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

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

Jak*_*uld 5

是的!有!

\n\n

但当然,要实现这一目标,您需要做比预期更多的工作。

\n\n

当我意识到 Microsoft\xe2\x80\x99s 页面在浏览器中加载时只能通过 JavaScript 运行时,我发现了这个问题。这使得通过 Curl 进行自动化几乎无法使用;I\xe2\x80\x99m 更新时没有手动下载此文件。相反,IO 想出了这个 Bash \xe2\x80\x9cone-liner\xe2\x80\x9d ,它对我来说效果很好。

\n\n

首先,让\xe2\x80\x99s 定义该基本 URL,如下所示:

\n\n
MICROSOFT_IP_RANGES_URL="https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653"\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在只需运行这个 Curl 命令\xe2\x80\x94,它会使用一些链接的 Greps\xe2\x80\x94 解析返回的网页 HTML,如下所示:

\n\n
curl -Lfs "${MICROSOFT_IP_RANGES_URL}" | grep -Eoi \'<a [^>]+>\' | grep -Eo \'href="[^\\"]+"\' | grep "download.microsoft.com/download/" | grep -m 1 -Eo \'(http|https)://[^"]+\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

返回的输出是一个漂亮且干净的最终 URL,如下所示:

\n\n
https://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_20181224.xml\n
Run Code Online (Sandbox Code Playgroud)\n\n

这正是自动直接下载该 XML 文件所需要的。如果您需要将该值分配给 URL,只需将其包装起来,$()如下所示:

\n\n
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)://[^"]+\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

只需通过访问该 URL$MICROSOFT_IP_RANGES_URL_FINAL即可。

\n


hel*_*irk 0

如果您可以使用wget在文本编辑器中编写并将其另存为,scriptNameYouWant.sh将为您提供一个 bash 脚本,该脚本将下载您想要的 xml 文件。

#! /bin/bash
wget http://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_21050223.xml
Run Code Online (Sandbox Code Playgroud)

当然,您可以直接从终端运行该命令并获得准确的结果。

如果你想使用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()
Run Code Online (Sandbox Code Playgroud)

不过我不太擅长 python 或 bash,所以我想 python 或 bash 都有更优雅的方法。

编辑

尽管使用动态 url,您仍可以获得 xml curl。对我有用的是:

#! /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"
Run Code Online (Sandbox Code Playgroud)

再次强调,我确信有一种更优雅的方法可以做到这一点。