域名查询
输入域名查询Whois信息
代码示例
以下是在不同编程语言中实现Whois查询的代码示例:
Python Whois查询
# 使用python-whois库查询Whois信息
# pip install python-whois
import whois
from datetime import datetime
def query_whois(domain):
try:
# 查询Whois信息
domain_info = whois.whois(domain)
# 解析结果
result = {
'domain_name': domain_info.domain_name,
'registrar': domain_info.registrar,
'creation_date': domain_info.creation_date,
'expiration_date': domain_info.expiration_date,
'updated_date': domain_info.updated_date,
'name_servers': domain_info.name_servers,
'status': domain_info.status,
'registrant': domain_info.registrant,
'organization': domain_info.org,
'country': domain_info.country
}
return result
except Exception as e:
return {'error': str(e)}
# 使用示例
if __name__ == '__main__':
domain = 'baidu.com'
info = query_whois(domain)
print(f"域名: {info.get('domain_name', 'N/A')}")
print(f"注册商: {info.get('registrar', 'N/A')}")
print(f"注册时间: {info.get('creation_date', 'N/A')}")
print(f"过期时间: {info.get('expiration_date', 'N/A')}")
print(f"DNS服务器: {info.get('name_servers', 'N/A')}")
# 使用socket库进行更底层的Whois查询
import socket
def whois_query_raw(domain, server='whois.iana.org', port=43):
try:
# 连接到Whois服务器
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((server, port))
# 发送查询请求
sock.send(f"{domain}\r\n".encode('utf-8'))
# 接收响应
response = b""
while True:
data = sock.recv(4096)
if not data:
break
response += data
sock.close()
return response.decode('utf-8', errors='ignore')
except Exception as e:
return f"查询失败: {str(e)}"
Node.js Whois查询
// 使用whois npm包
// npm install whois
const whois = require('whois');
async function queryWhois(domain) {
return new Promise((resolve, reject) => {
whois.lookup(domain, (err, data) => {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
}
// 解析Whois数据
function parseWhoisData(data) {
const result = {};
const lines = data.split('\n');
lines.forEach(line => {
const match = line.match(/^([^:]+):\s*(.+)$/);
if (match) {
const key = match[1].trim();
const value = match[2].trim();
// 转换为驼峰命名
const camelKey = key.toLowerCase().replace(/_([a-z])/g, (g) => g[1].toUpperCase());
result[camelKey] = value;
}
});
return result;
}
// 使用示例
(async () => {
try {
const domain = 'baidu.com';
const rawData = await queryWhois(domain);
const parsed = parseWhoisData(rawData);
console.log('原始Whois数据:');
console.log(rawData);
console.log('\n解析后的信息:');
console.log(parsed);
} catch (error) {
console.error('查询失败:', error);
}
})();
使用第三方API查询
# Python使用WhoisXML API
import requests
def query_whois_api(domain, api_key='your_api_key'):
url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService"
params = {
'apiKey': api_key,
'domainName': domain,
'outputFormat': 'JSON'
}
try:
response = requests.get(url, params=params)
data = response.json()
if 'DomainInfo' in data:
info = data['DomainInfo']
return {
'domain': info.get('domainName'),
'registrar': info.get('registrar'),
'created': info.get('createdDate'),
'expires': info.get('expiresDate'),
'status': info.get('status')
}
return data
except Exception as e:
return {'error': str(e)}
# 使用示例
if __name__ == '__main__':
result = query_whois_api('baidu.com')
print(result)
关于Whois
什么是Whois?
Whois是一种用于查询互联网资源(如域名、IP地址、AS号码)注册信息的协议和服务。通过Whois查询,可以获取域名的注册人信息、注册商、注册时间、过期时间、DNS服务器等信息。
Whois信息包含的内容
- 域名基本信息:域名名称、域名状态
- 注册人信息:注册人姓名、组织、邮箱
- 注册商信息:注册商名称、联系信息
- 时间信息:注册时间、更新时间、过期时间
- DNS信息:名称服务器、DNS记录
域名状态说明
- ok:域名正常可用
- clientDeleteProhibited:禁止删除(由注册人设置)
- clientTransferProhibited:禁止转移
- clientUpdateProhibited:禁止更新
- serverDeleteProhibited:禁止删除(由注册商设置)
- pendingDelete:正在删除流程中
- redemptionPeriod:赎回期
常见问题(FAQ)
Q: 为什么有些域名的Whois信息显示不全?
A: 许多域名注册商提供隐私保护服务(WHOIS Privacy),会隐藏注册人的真实信息。此外,GDPR等隐私法规也限制了个人信息的公开显示。
Q: 域名过期后会发生什么?
A: 域名过期后会进入宽限期(通常0-30天),可按原价续费;随后进入赎回期(通常30天),需支付额外费用赎回;最后进入删除期(约5天),之后域名会被释放,任何人都可以注册。