拓冰建站拓冰建站
首页 / 资讯中心 / 正文

ipwhois Legacy Whois完整教程:深入解析Port 43查询与Referral转发机制

ipwhois Legacy Whois完整教程深入解析Port 43查询与Referral转发机制【免费下载链接】ipwhoisRetrieve and parse whois data for IPv4 and IPv6 addresses项目地址: https://gitcode.com/gh_mirrors/ip/ipwhoisipwhois是一个专注于获取并解析 IPv4 / IPv6 地址 whois 数据的 Python 库。它的 Legacy Whois 功能通过经典的Port 43TCP协议直连各大注册局服务器查询 IP 归属并支持Referralrwhois转发机制帮你拿到更细粒度的网络信息。本教程带你从零看懂这两项核心机制。 什么是 ipwhois 的 Legacy Whois在介绍 RDAP基于 HTTP 的现代 whois 协议之前互联网一直依赖WHOIS 协议——它简单粗暴客户端通过TCP 43 端口与注册局RIR服务器建立连接发送一个 IP 地址外加换行符服务器返回一大段纯文本包含网络段、持有者、邮箱等注册信息ipwhois 把这个流程封装成了lookup_whois()方法自 v0.12.0 起取代了旧的lookup()方法。它的核心源码位于发起 43 端口查询ipwhois/net.pyget_whois方法约第 524 行解析响应与 Referral 转发ipwhois/whois.pyWhois.lookup方法约第 550 行对外统一入口ipwhois/ipwhois.pylookup_whois方法约第 67 行官方文档WHOIS.rst及docs/source/WHOIS.rst 快速安装2 步用上 ipwhois方式一pip 安装推荐pip install ipwhois方式二从仓库源码安装git clone https://gitcode.com/gh_mirrors/ip/ipwhois cd ipwhois pip install -e . 支持 Python 2.7 与 3.4几乎零门槛。 Port 43 查询原理从发送 IP 到拿到原始文本ipwhois 会根据你 IP 所属的注册局自动选择对应的 whois 服务器定义在ipwhois/whois.py的RIR_WHOIS字典约第 63 行注册局 (RIR)负责区域Whois 服务器查询语句ARIN北美whois.arin.netn IPRIPE NCC欧洲whois.ripe.netIP可加-rAPNIC亚太whois.apnic.netIPLACNIC拉丁美洲whois.lacnic.netIPAFRINIC非洲whois.afrinic.netIP在ipwhois/net.py中实际流程是创建 TCP Socket 并设置超时默认 5 秒连接到对应服务器43 端口发送IP地址 \r\nARIN 会加n 前缀以返回 CIDR 摘要循环recv(4096)直到接收完毕得到原始文本响应容错设计也很贴心遇到超时、连接重置会自动重试默认retry_count3若服务器返回 Query rate limit exceeded会等待 1 秒后重试重试耗尽则抛出WhoisRateLimitError定义于ipwhois/exceptions.py。 一行代码查询lookup_whois 快速上手from ipwhois import IPWhois obj IPWhois(74.125.225.229) results obj.lookup_whois() print(results[asn_description]) # GOOGLE - Google Inc., US返回字典的结构详见WHOIS.rst的 Output 章节键含义asn/asn_cidr/asn_descriptionASN 编号 / 网段 / 描述asn_registry所属注册局如arinnets网络注册信息列表cidr、持有者、国家、邮箱等 12 个字段raw原始 whois 文本需inc_rawTruereferralReferral 转发结果需get_referralTruenir日本 JPNIC / 韩国 KRNIC 的国家级注册局信息 启用 Referral 转发get_referral 深度解析什么是 Referral有些网络尤其是大型运营商会把「子网级的详细分配信息」放在独立的rwhois 服务器上主 whois 响应里只留一行路标ReferralServer: rwhois://rwhois.cogentco.com:43ipwhois 的 Referral 机制ipwhois/whois.py约第 641–710 行分三步正则提取用^ReferralServer:[^\S\n](.:[0-9])$从原始响应中找出 rwhois 服务器地址与端口二次查询向该 rwhois 服务器发起新的 43 端口查询拿到子网级信息独立解析rwhois 的字段格式与 RIR 不同如network:IP-Network因此使用单独的RWHOIS正则字典约第 155 行解析后放入结果的referral键实战示例——查询 Cogent 的 IP 并开启转发results obj.lookup_whois(get_referralTrue) print(results[referral][description]) # 子网级分配信息⚠️三个实用开关get_referralTrue开启转发查询默认关闭ignore_referral_errorsTruerwhois 服务器经常年久失修开启后转发失败不会中断整个查询inc_rawTrue同时返回raw与raw_referral原始文本方便调试️ 安全提示ipwhois 内置全局黑名单ipwhois/net.py的BLACKLIST如root.rwhois.net黑名单服务器不会被访问你还可以通过extra_blacklist参数追加自己的黑名单。️ 避坑指南限速、超时与常见报错场景表现解决办法触发限速WhoisRateLimitError增大请求间隔LACNIC 限速较严格网络超时WhoisLookupError调大构造时的timeout参数默认 5 秒rwhois 服务器失联转发查询抛异常设置ignore_referral_errorsTrue只需部分字段解析较慢用field_list指定字段列表# 完整容错写法 results IPWhois(38.113.198.252, timeout10).lookup_whois( get_referralTrue, ignore_referral_errorsTrue, retry_count3 )❓ 常见问题 FAQQ1Legacy Whois 和 RDAP 该用哪个RDAPlookup_rdap()是官方推荐的现代方式返回 JSON、更稳定Legacy WhoisPort 43胜在能访问 rwhois Referral 这类老数据源且不需要 HTTP。两者可按需混用。Q2为什么查出来的nets里有多个网段ipwhois 能识别父/子网络结构会把一次响应中列出的多个 CIDR 拆成独立的字典条目。Q3IPv6 支持吗支持Port 43 查询对 IPv4 / IPv6 一视同仁返回结构完全一致。Q4查询速度慢怎么办大概率是源 IP 被限速尤其多用户共用代理时。可尝试缓存结果参考examples/redis_cache/redis_cache.py或改用 RDAP 通道。✅ 小结ipwhois 的Port 43 查询由ipwhois/net.py完成自动选择 RIR 服务器 → TCP 43 连接 → 发送查询 → 带重试与限速处理Referral 转发由ipwhois/whois.py完成提取ReferralServer→ 二次 rwhois 查询 → 用独立正则解析核心入口就是IPWhois(ip).lookup_whois(get_referralTrue)配合retry_count、ignore_referral_errors、field_list三个参数即可覆盖绝大多数生产场景【免费下载链接】ipwhoisRetrieve and parse whois data for IPv4 and IPv6 addresses项目地址: https://gitcode.com/gh_mirrors/ip/ipwhois创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门