Microsoft提供了一个URL,您可以在其中下载Microsoft Azure使用的公共IP范围.
https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653
问题是,有没有办法使用Python或其他脚本自动从该站点下载XML文件?我正在尝试安排任务来获取新的IP范围文件并根据我的防火墙策略处理它.
当我意识到 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\nMICROSOFT_IP_RANGES_URL="https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653"\nRun Code Online (Sandbox Code Playgroud)\n\n现在只需运行这个 Curl 命令\xe2\x80\x94,它会使用一些链接的 Greps\xe2\x80\x94 解析返回的网页 HTML,如下所示:
\n\ncurl -Lfs "${MICROSOFT_IP_RANGES_URL}" | grep -Eoi \'<a [^>]+>\' | grep -Eo \'href="[^\\"]+"\' | grep "download.microsoft.com/download/" | grep -m 1 -Eo \'(http|https)://[^"]+\'\nRun Code Online (Sandbox Code Playgroud)\n\n返回的输出是一个漂亮且干净的最终 URL,如下所示:
\n\nhttps://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_20181224.xml\nRun Code Online (Sandbox Code Playgroud)\n\n这正是自动直接下载该 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)://[^"]+\')\nRun Code Online (Sandbox Code Playgroud)\n\n只需通过访问该 URL$MICROSOFT_IP_RANGES_URL_FINAL即可。
如果您可以使用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)
再次强调,我确信有一种更优雅的方法可以做到这一点。
| 归档时间: |
|
| 查看次数: |
3140 次 |
| 最近记录: |