Microsoft提供了一个URL,您可以在其中下载Microsoft使用的公共IP范围。
https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653
问题是,有没有一种方法可以使用Python或其他脚本自动从该站点下载XML文件?我试图安排一个任务来获取新的IP范围文件,并为我的防火墙策略处理它。
发布于 2018-12-27 02:29:18
是!的确有!
当然,要做到这一点,您需要做的工作比预期的要多一些。
当我意识到微软的页面只在浏览器中加载时才能通过JavaScript工作时,我就发现了这个问题。这使得通过Curl实现的自动化几乎不可用;当更新发生时,我不会手动下载这个文件。相反,IO想出了一条适合我的Bash“一线”。
首先,让我们像下面这样定义这个基本URL:
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访问这个网址,就可以了。
发布于 2015-03-02 13:27:06
如果您可以使用wget在文本编辑器中编写并将其保存为scriptNameYouWant.sh,则会为您提供一个下载所需的xml文件的bash脚本。
#! /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的动态url,您还是可以获得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"再一次,我确信有一种更优雅的方法可以做到这一点。
发布于 2020-12-11 14:49:37
下面是一个获得JSON文件URL的一行:
$ curl -sS https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519 | egrep -o 'https://download.*?\.json' | uniqhttps://stackoverflow.com/questions/28798014
复制相似问题