IP Whois变更记录查询
接口说明
查询该IP的Whois变更记录。
请求地址
https://api.f.360.cn/ips/std/v2/whois_changelog/:ip
请求方法
POST
请求参数
| 参数名 | 类型 | 位置 | 必选 | 示例值 | 说明 |
|---|---|---|---|---|---|
| ip | string | query | 是 | 36.99.173.14 | 查询对象 |
| limit | int | query | 否 | 1000 | 返回数据条数,默认值为1000 |
| skip | int | query | 是 | 0 | 跳过条数,默认值为0 |
响应参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| 时间 | string | 2025-03-17 15:48:24 | 当前记录发现时间 |
| current | Map | - | 当前Whois记录 |
| inetnum | String | 2.2.0.0 - 2.2.255.255 | 地址范围 |
| msg | String | 2.2.0.0 - 2.2.255.255 | 结果说明 |
| start_ip | String | 2.2.0.0 | 开始IP地址 |
| end_ip | String | 2.2.255.255 | 结束IP地址 |
| net_name | String | ORCL-AMER-OCI-22 | 网络名称 |
| org_name | String | - | 组织名称 |
| desc | Array | | 描述 |
| country | String | US | 国家 |
| net_type | String | SUB-ALLOCATED PA | 网络类型 |
| parent_net | String | 2.0.0.0 - 2.2.255.255 | 父网络 |
| object_class_name | String | ip network | 类型名称 |
| last_modified | String | 2024-10-04T14:24:27Z | 最后更新时间 |
| rdap_conformance | Array | | 一致性 |
| server | String | whois.ripe.net | Whois服务器 |
| status | String | active | 状态 |
| links | Array | - | 链接 |
| links.href | String | https://rdap.db.ripe.net/ips/rirSearch1/up/2.2.0.0%20-%202.2.255.255 | 链接 |
| links.rel | String | self | 说明 |
| source | String | RIPE | 数据来源 |
| notice | Map | - | 通知信息 |
| notice.source | Map | | 源 |
| notice.terms_and_conditions | Map | | 条款和条件 |
| notice.whois_inaccuracy_reporting | Map | | Whois错误报告 |
| notice.copyright_notice | Map | | 版权声明 |
| notice.filtered | Map | | 版权声明 |
| entity | Array | - | 实体信息 |
| entity.events | Array | | 事件 |
| entity.addresss | String | 500 Oracle Parkway, M/S 501ip3 Redwood Shores CA, 94065 | 地址 |
| entity.email | String | domain-contact_ww_grp@oracle.com | 邮箱 |
| entity.handle | String | ORCL1-RIPE | 实体标识符 |
| entity.links | Array | | 链接 |
| entity.name | String | Domain Administrator | 实体名称 |
| entity.remark_info | Array | | 评论 |
| entity.roles | Array | noc/technical/administrative/abuse | noc/技术/管理员/滥用 |
| entity.tel | String | - | 电话 |
| entity.type | String | group/individual | 组织/个人 |
| entity.version | String | 4.0 | 版本号 |
| first_seen | Int | 1740991800 | 首次发现时间(秒级) |
| last_seen | Int | 1740991800 | 最近发现时间(秒级) |
| insert | Map | - | 当前Whois记录与上一次Whois记录比较,插入的内容 |
| delete | Map | - | 当前Whois记录与上一次Whois记录比较,删除的内容 |
| update | Map | - | 当前Whois记录与上一次Whois记录比较,更新的内容 |
| before | Map | - | 上一次Whois记录 |
请求示例
支持cUrl、Python、Java、PHP、Go语言的请求,示例如下
#!/usr/bin/env bash
set -euo pipefail
APPID="" # apikey
SECRET="" # salt
URL="https://api.f.360.cn/ips/std/v2/whois_changelog/1.1.1.1"
BODY='{}'
NONCE=$(printf '%08d' $((RANDOM % 100000000)))
TIMESTAMP=$(date +%s)
BODY_MD5=$(printf '%s' "$BODY" | openssl dgst -md5 -hex | awk '{print $NF}')
SIGNATURE=$(printf '%s' "${BODY_MD5}${APPID}${NONCE}${TIMESTAMP}${SECRET}" | openssl dgst -md5 -hex | awk '{print $NF}')
SIGNATURE=${SIGNATURE:16}
curl --location --request POST "$URL" \
--header "Content-Type: application/json" \
--header "X-360-Key: ${APPID}" \
--header "X-360-Nonce: ${NONCE}" \
--header "X-360-Timestamp: ${TIMESTAMP}" \
--header "X-360-Signature: ${SIGNATURE}" \
--data "${BODY}"# -*- coding:utf-8 -*—
import hashlib
import json
import random
import time
import requests
APPID = "" # apikey
SECRET = "" # salt
def make_headers(appid, secret, body):
headers = {}
headers["X-360-Key"] = appid
headers["X-360-Nonce"] = str(random.randint(0, 99999999)).zfill(8)
headers["X-360-Timestamp"] = str(int(time.time()))
s = (
hashlib.md5(body.encode("utf8")).hexdigest()
+ headers["X-360-Key"]
+ headers["X-360-Nonce"]
+ headers["X-360-Timestamp"]
+ secret
)
md5 = hashlib.md5(s.encode("utf8")).hexdigest()
headers["X-360-Signature"] = md5[16:]
headers["Content-Type"] = "application/json"
return headers
def do_post(url, body):
res = requests.post(
url,
data=json.dumps(params),
headers=make_headers(APPID, SECRET, json.dumps(body)),
)
print(res.text)
if __name__ == "__main__":
# 请求地址
url = "https://api.f.360.cn/ips/std/v2/whois_changelog/1.1.1.1"
params = {}
do_post(url, params)import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.concurrent.ThreadLocalRandom;
public class Demo {
static String md5(String input) throws Exception {
byte[] digest = MessageDigest.getInstance("MD5")
.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
String appid = ""; // apikey
String secret = ""; // salt
String url = "https://api.f.360.cn/ips/std/v2/whois_changelog/1.1.1.1";
String body = "{}";
String nonce = String.format("%08d", ThreadLocalRandom.current().nextInt(100000000));
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
String signature = md5(md5(body) + appid + nonce + timestamp + secret).substring(16);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("X-360-Key", appid)
.header("X-360-Nonce", nonce)
.header("X-360-Timestamp", timestamp)
.header("X-360-Signature", signature)
.POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
System.out.println(response.body());
}
}<?php
// apikey
$appid = "";
// salt
$secret = "";
$url = 'https://api.f.360.cn/ips/std/v2/whois_changelog/1.1.1.1';
$body = json_encode([], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$nonce = str_pad((string) random_int(0, 99999999), 8, "0", STR_PAD_LEFT);
$timestamp = (string) time();
$signature = substr(md5(md5($body) . $appid . $nonce . $timestamp . $secret), 16);
$ch = curl_init($url);
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-360-Key: {$appid}",
"X-360-Nonce: {$nonce}",
"X-360-Timestamp: {$timestamp}",
"X-360-Signature: {$signature}",
],
];
$options[CURLOPT_POST] = true;
$options[CURLOPT_POSTFIELDS] = $body;
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if ($response === false) {
echo curl_error($ch), PHP_EOL;
} else {
echo $response, PHP_EOL;
}
curl_close($ch);package main
import (
"bytes"
"crypto/md5"
"encoding/hex"
"fmt"
"io"
"math/rand"
"net/http"
"time"
)
func md5Hex(s string) string {
sum := md5.Sum([]byte(s))
return hex.EncodeToString(sum[:])
}
func main() {
appid := "" // apikey
secret := "" // salt
url := "https://api.f.360.cn/ips/std/v2/whois_changelog/1.1.1.1"
body := []byte(`{}`)
nonce := fmt.Sprintf("%08d", rand.Intn(100000000))
timestamp := fmt.Sprintf("%d", time.Now().Unix())
signature := md5Hex(md5Hex(string(body)) + appid + nonce + timestamp + secret)[16:]
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-360-Key", appid)
req.Header.Set("X-360-Nonce", nonce)
req.Header.Set("X-360-Timestamp", timestamp)
req.Header.Set("X-360-Signature", signature)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
respBody, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(respBody))
}响应示例
业务正常响应
{
"status": "ok",
"code": 200,
"data": {
"2026-07-15 12:35:36": {
"current": {
"status": "active",
"org_name": "",
"notice": {
"source": {
"desc": "Objects returned came from source APNIC"
},
"terms_and_conditions": {
"rel": "terms-of-service",
"desc": "This is the APNIC WHOIS Database query service. The objects are in RDAP format. http://www.apnic.net/db/dbcopyright.html"
},
"whois_inaccuracy_reporting": {
"rel": "inaccuracy-report",
"desc": "If you see inaccuracies in the results, please visit: https://www.apnic.net/manage-ip/using-whois/abuse-and-spamming/invalid-contact-form"
}
},
"last_seen": 1784090136,
"net_name": "APNIC-LABS",
"links": [
{
"href": "https://rdap.apnic.net/ip/1.1.1.0/24",
"rel": "self"
}
],
"rdap_conformance": [
"history_version_0",
"nro_rdap_profile_0",
"cidr0",
"rdap_level_0"
],
"country": "AU",
"parent_net": "",
"object_class_name": "ip network",
"entity": [
{
"handle": "AIC3-AP",
"roles": [
"administrative",
"technical"
],
"links": [
{
"href": "https://rdap.apnic.net/entity/AIC3-AP",
"rel": "self"
}
],
"events": [
{
"action": "registration",
"date": "2023-04-26T00:42:16Z"
},
{
"action": "last changed",
"date": "2024-07-18T04:37:37Z"
}
],
"version": "4.0",
"address": "6 Cordelia St South Brisbane QLD 4101",
"tel": "+61 7 3858 3100",
"type": "group",
"email": "research@apnic.net",
"name": "APNICRANDNET Infrastructure Contact"
},
{
"handle": "IRT-APNICRANDNET-AU",
"roles": [
"abuse"
],
"links": [
{
"href": "https://rdap.apnic.net/entity/IRT-APNICRANDNET-AU",
"rel": "self"
}
],
"events": [
{
"action": "registration",
"date": "2011-04-12T17:56:54Z"
},
{
"action": "last changed",
"date": "2025-11-18T00:26:57Z"
}
],
"remark_info": [
{
"remarks": "helpdesk@apnic.net was validated on 2021-02-09"
}
],
"version": "4.0",
"address": "PO Box 3646\nSouth Brisbane, QLD 4101\nAustralia",
"type": "group",
"email": "helpdesk@apnic.net",
"name": "IRT-APNICRANDNET-AU"
},
{
"handle": "ORG-ARAD1-AP",
"roles": [
"registrant"
],
"links": [
{
"href": "https://rdap.apnic.net/entity/ORG-ARAD1-AP",
"rel": "self"
}
],
"events": [
{
"action": "registration",
"date": "2017-08-08T23:21:55Z"
},
{
"action": "last changed",
"date": "2023-09-05T02:15:19Z"
}
],
"version": "4.0",
"address": "6 Cordelia St",
"tel": "+61-7-38583199",
"type": "org",
"email": "helpdesk@apnic.net",
"name": "APNIC Research and Development"
}
],
"source": "APNIC",
"end_ip": "1.1.1.255",
"net_type": "ASSIGNED PORTABLE",
"inetnum": "1.1.1.0 - 1.1.1.255",
"last_modified": "2023-04-26T22:57:58Z",
"start_ip": "1.1.1.0",
"first_seen": 1763426934,
"server": "whois.apnic.net",
"ip_version": "v4",
"desc": [
"APNIC and Cloudflare DNS Resolver project",
"Routed globally by AS13335/Cloudflare",
"Research prefix for APNIC Labs"
]
},
"insert": {},
"delete": {},
"update": {
"entity": [
{
"handle": "IRT-APNICRANDNET-AU",
"roles": [
"abuse"
],
"links": [
{
"href": "https://rdap.apnic.net/entity/IRT-APNICRANDNET-AU",
"rel": "self"
}
],
"events": [
{
"action": "registration",
"date": "2011-04-12T17:56:54Z"
},
{
"action": "last changed",
"date": "2025-11-18T00:26:57Z"
}
],
"remark_info": [
{
"remarks": "helpdesk@apnic.net was validated on 2021-02-09"
}
],
"version": "4.0",
"address": "PO Box 3646\nSouth Brisbane, QLD 4101\nAustralia",
"type": "group",
"email": "helpdesk@apnic.net",
"name": "IRT-APNICRANDNET-AU"
}
]
},
"before": {
"status": "active",
"org_name": "",
"notice": {
"source": {
"desc": "Objects returned came from source APNIC"
},
"terms_and_conditions": {
"rel": "terms-of-service",
"desc": "This is the APNIC WHOIS Database query service. The objects are in RDAP format. http://www.apnic.net/db/dbcopyright.html"
},
"whois_inaccuracy_reporting": {
"rel": "inaccuracy-report",
"desc": "If you see inaccuracies in the results, please visit: https://www.apnic.net/manage-ip/using-whois/abuse-and-spamming/invalid-contact-form"
}
},
"last_seen": 1763426683,
"net_name": "APNIC-LABS",
"links": [
{
"href": "https://rdap.apnic.net/ip/1.1.1.0/24",
"rel": "self"
}
],
"rdap_conformance": [
"history_version_0",
"nro_rdap_profile_0",
"cidr0",
"rdap_level_0"
],
"country": "AU",
"parent_net": "",
"object_class_name": "ip network",
"entity": [
{
"handle": "ORG-ARAD1-AP",
"roles": [
"registrant"
],
"links": [
{
"href": "https://rdap.apnic.net/entity/ORG-ARAD1-AP",
"rel": "self"
}
],
"events": [
{
"action": "registration",
"date": "2017-08-08T23:21:55Z"
},
{
"action": "last changed",
"date": "2023-09-05T02:15:19Z"
}
],
"version": "4.0",
"address": "6 Cordelia St",
"tel": "+61-7-38583199",
"type": "org",
"email": "helpdesk@apnic.net",
"name": "APNIC Research and Development"
},
{
"handle": "IRT-APNICRANDNET-AU",
"roles": [
"abuse"
],
"links": [
{
"href": "https://rdap.apnic.net/entity/IRT-APNICRANDNET-AU",
"rel": "self"
}
],
"events": [
{
"action": "registration",
"date": "2011-04-12T17:56:54Z"
},
{
"action": "last changed",
"date": "2025-09-03T02:28:14Z"
}
],
"remark_info": [
{
"remarks": "helpdesk@apnic.net was validated on 2021-02-09"
}
],
"version": "4.0",
"address": "PO Box 3646\nSouth Brisbane, QLD 4101\nAustralia",
"type": "group",
"email": "helpdesk@apnic.net",
"name": "IRT-APNICRANDNET-AU"
},
{
"handle": "AIC3-AP",
"roles": [
"technical",
"administrative"
],
"links": [
{
"href": "https://rdap.apnic.net/entity/AIC3-AP",
"rel": "self"
}
],
"events": [
{
"action": "registration",
"date": "2023-04-26T00:42:16Z"
},
{
"action": "last changed",
"date": "2024-07-18T04:37:37Z"
}
],
"version": "4.0",
"address": "6 Cordelia St South Brisbane QLD 4101",
"tel": "+61 7 3858 3100",
"type": "group",
"email": "research@apnic.net",
"name": "APNICRANDNET Infrastructure Contact"
}
],
"source": "APNIC",
"end_ip": "1.1.1.255",
"net_type": "ASSIGNED PORTABLE",
"inetnum": "1.1.1.0 - 1.1.1.255",
"last_modified": "2023-04-26T22:57:58Z",
"start_ip": "1.1.1.0",
"first_seen": 1756866530,
"server": "whois.apnic.net",
"ip_version": "v4",
"desc": [
"APNIC and Cloudflare DNS Resolver project",
"Routed globally by AS13335/Cloudflare",
"Research prefix for APNIC Labs"
]
}
}
}
}业务异常响应
{
"code": 422,
"status": "bad",
"err": "xxx"
}{
"code": "GC00101",
"msg": "param missing"
}