🐈
[ローカルブレイクアウト] Windows office365のIP・URLを取得
手順
- 公式ページで公開されているリストを取得する。
- 必要な部分だけを抜き出す。
以下のようにJSON形式で公開されている
エンドポイント:
[
{
"id": 1,
"serviceArea": "Exchange",
"serviceAreaDisplayName": "Exchange Online",
"urls": [
"outlook.cloud.microsoft",
"outlook.office.com",
"outlook.office365.com"
],
"ips": [
"13.107.6.152/31",
...
}
]
エンドポイントにFormatパラメータを追加すると、csv形式でも取得可能。
変更前:
https://endpoints.office.com/endpoints/worldwide?clientrequestid=b10c5ed1-bad1-445f-b386-b919946339a7
変更後:
https://endpoints.office.com/endpoints/worldwide?Format=csv&clientrequestid=b10c5ed1-bad1-445f-b386-b919946339a7
更新頻度
エンドポイントのデータは、毎月初めに必要に応じて更新され、アクティブになる 30 日前に新しい IP アドレスと URL が公開されます。
とのこと。
その他詳しくは、公式ページを参考にしてください。
リストの更新日時取得
同ページRSSフィードのlastBuildDate項目から取得可能
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Microsoft 365 URLs and IP Addresses - Office 365 Worldwide</title>
<link>http://aka.ms/ipurlws</link>
<description />
<language>en-us</language>
<lastBuildDate>Fri, 28 Feb 2025 00:22:26 Z</lastBuildDate> # ここ
<item>
...
pythonでIPとURLだけ抜き出してみる。
ソースコード
import requests
# requre
endpoints = 'https://endpoints.office.com/endpoints/worldwide?clientrequestid=b10c5ed1-bad1-445f-b386-b919946339a7'
endpoints_data = requests.get(endpoints).json() #load json
# tmp
address_list_ip4 = []
address_list_ip6 = []
url_list = []
def get_json_data():
json_data = {}
for i, obj in enumerate(endpoints_data):
urls = obj.get('urls')
ips = obj.get('ips')
if ips != None:
for ip in ips:
# ipv4
if '.' in ip:
address_list_ip4.append(ip)
else:
# ipv6
address_list_ip6.append(ip)
if urls != None:
url_list.extend(urls)
json_data['ipv4'] = address_list_ip4
json_data['ipv6'] = address_list_ip6
json_data['urls'] = url_list
return json_data
if __name__ == '__main__':
# Json
print(get_json_data())
- いい感じにとれる。
{
"ipv4": [
"13.107.6.152/31",
"13.107.18.10/31",
"13.107.128.0/22",
・・・
"40.126.0.0/18",
"13.107.6.192/32",
"13.107.9.192/32"
],
"ipv6": [
"2603:1006::/40",
"2603:1016::/36",
"2603:1026::/36",
・・・
"2603:1057:2::/48",
"2620:1ec:4::192/128",
"2620:1ec:a92::192/128"
],
"urls": [
"outlook.cloud.microsoft",
"outlook.office.com",
"outlook.office365.com",
・・・
"*.cloud.microsoft",
"*.static.microsoft",
"*.usercontent.microsoft"
]
}
ほかの言語でもおそらく同じようなことができるかと思います。
コードを書くのが面倒な人へ
Jsonレスポンスを返すAPIを公開しました。
- 以下のエンドポイントから、IP・URLのみを抽出したJsonを取得できます。
https://script.google.com/macros/s/AKfycbxk0q4nAibQPUU5bUD9aZ5xq_jS342_6GBUtn2FAbyJ0TZcvLW5eIDaic5E0719aRcXKw/exec
参考
Discussion