⭐ 推荐:社区规则条款 V1.0

如何通过Whois查询IP地址的归属和注册信息?

lqyyzz
lqyyzz 观望站长
发布于 2026-10-27 02:41 ·2 浏览 ·9 回复
内容摘要

说明用 whois 查询 IP 归属机构、国家、运营商及域名注册商、到期时间和 DNS 服务器的步骤,并提示区分 IP 与域名、按 RIR 查询、解读关键字段及注意明文协议和查询频率限制。

学完这篇,你能独立用 whois 查出任意 IP 段属于哪个机构、哪个国家、由哪家运营商维护,也能查到一个域名的注册商、到期时间和 DNS 服务器,并且知道哪些字段能信、哪些不能信。

第一步:先分清你要查的是 IP 还是域名

这一步是确认查询对象,因为它决定你该用哪套数据库。IP 地址查的是 RIR(区域互联网注册管理机构)的分配记录,全球有 5 家:APNIC(亚太)、ARIN(北美)、RIPE NCC(欧洲)、LACNIC(拉美)、AFRINIC(非洲),中国的 IP 记录通常落在 APNIC 下。域名查的是注册局的域名注册记录,走的是另一套 whois 服务器。两者用同一个 whois 命令,但返回的字段完全不同,别混着看。

第二步:装好 whois 客户端并发出第一条查询

这一步在本地装好命令行工具,查出一条原始记录。Linux 下安装:


sudo apt update && sudo apt install -y whois
# CentOS / Rocky / AlmaLinux
sudo dnf install -y whois

确认版本:whois --version,Debian 系当前是 5.5.x。然后直接查:

whois 8.8.8.8

如果默认服务器没给出结果,就手动指定对应的 RIR 服务器:

whois -h whois.apnic.net 114.114.114.114
whois -h whois.arin.net 8.8.8.8
whois -h whois.ripe.net 193.0.0.1
whois -h whois.lacnic.net 200.0.0.1
whois -h whois.afrinic.net 41.0.0.1

Windows 自带没有 whois 命令,用下面第四步的网页入口更快。

注意:whois 走的是 43 端口明文协议,不加密,且各 RIR 都有查询频率限制,批量脚本一定要加 sleep 间隔,否则会被临时封 IP。

第三步:读懂返回结果里的关键字段

这一步是把一大段纯文本翻译成人话。IP 查询结果重点看这几行:inetnum 或 inet6num 是网段范围;netname 是网络名;descr 是机构描述,通常直接写着运营商名字;country 是注册国家代码;org 是所属组织;admin-c / tech-c 是联系人和技术联系人句柄;mnt-by 是维护者;status 常见值是 ALLOCATED NON-PORTABLE(RIR 分配给运营商)或 ASSIGNED PA(运营商再分给下游客户);created 和 last-modified 是登记与更新时间。

域名查询则看 Registrar(注册商)、Registry Expiry Date(到期日)、Name Server(DNS 服务器)、Domain Status(如 clientTransferProhibited 表示禁止转移)、Registrant(注册人,经常被打码)。

注意:whois 输出没有统一格式,不同 RIR 字段名和排版都不一样,只能人工读,不要指望正则一把梭。

第四步:不装软件,用 RIR 网页入口查

这一步给不能装命令行工具的场景准备替代方案。打开 APNIC 的 Whois 查询页(wq.apnic.net),在输入框填入 IP 或网段,点查询按钮即可;ARIN 用 search.arin.net,RIPE 用 apps.db.ripe.net 的 DB Web UI,LACNIC 和 AFRINIC 官网首页也都有 Whois 搜索框。想先确认某个 IP 归哪家 RIR,可以先查 IANA 的分配列表(www.iana.org/numbers),再跳到对应 RIR。

第五步:查域名注册信息

这一步查域名的注册商和到期时间。打开 ICANN Lookup(lookup.icann.org),输入域名,页面会分两块显示:Registration Data 是注册局记录,Registrar Information 是注册商记录。国内域名(.cn)用 CNNIC 的 whois 服务查更准。

注意:受 GDPR 和隐私保护服务影响,个人域名的注册人姓名、邮箱、电话在 2018 年之后基本全部脱敏成 “REDACTED FOR PRIVACY” 或代理机构信息,想靠 whois 查到真实持有人,多数情况下查不到。想联系持有人,走注册商提供的匿名留言表单。

第六步:查不到或只有上游信息时怎么往下追

这一步解决“结果只显示运营商”的情况。很多 IP 的 whois 记录到 ISP 那一层就停了,往下没有最终用户信息,这是正常的:运营商把地址段分配给企业客户时不一定登记。此时可以拿 netname 和 mnt-by 去同一 RIR 再查一次,或者改用 RDAP 协议,返回的是结构化 JSON,比纯文本好解析:

curl -s https://rdap.apnic.net/ip/8.8.8.8

RDAP 结果里的 handle、entities、events 字段可以直接用 jq 提取。拿不准的记录,可以把 whois 原文贴到 GJ站长论坛 的问答区请人帮忙判断。

注意:whois 的 country 只是登记国家,不代表服务器物理位置。CDN 节点、云主机、跨境专线、代理 IP 都可能出现登记地和实际所在地完全不一致的情况,别拿它当地理定位用。

小结

  • IP 查 RIR 数据库(APNIC / ARIN / RIPE / LACNIC / AFRINIC),域名查注册局和注册商记录,两套数据别混。
  • 命令行 whois -h whois.apnic.net <IP> 可以指定服务器,网页入口在 wq.apnic.net、search.arin.net、lookup.icann.org。
  • 重点字段:inetnum 网段、netname 网络名、country 登记国、mnt-by 维护者;域名看 Registrar、Registry Expiry Date、Name Server。
  • 注册人信息大多已脱敏,country 也不等于物理位置,这两点最容易误判。
  • 批量查询必须限速,43 端口明文无加密,别传敏感参数。

免责声明:本文所涉查询方法与字段说明仅用于技术学习与合规的网络排障,whois 数据由各注册管理机构公开提供,可能存在滞后、脱敏或不完整;请勿将查询结果用于定位、骚扰或任何侵犯他人权益的用途,实际使用请遵循各 RIR 的使用条款及当地法律法规。

本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-2603.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 9

满月居于空
满月居于空 萌新站长 1楼 2026-10-27 02:47

结论:整体思路和步骤没问题,但有两个坑建议你在帖里补上——查 .com/.net 域名时 whois 返回的是「薄记录」,必须再向注册商服务器查一次;IP 记录里的 country 字段是注册国,不等于机器真实所在地。

薄记录这块最容易被忽略。whois example.com 默认连的是 Verisign,返回结果里有个 Registrar WHOIS Server: whois.xxx.com 字段,那才是注册商的服务器,注册人、完整状态、注册商侧的联系方式都在那边,得再发一次 whois -h whois.xxx.com example.com。.org、.cn 这类是厚记录,一次就能拿全,所以有人查 .com 觉得 whois 不好用,其实是少查了一步。另外 Domain Status 里出现 clientTransferProhibited 是好事,表示注册商锁已开,反而是只有 ok 状态时更该留意。

IP 那边同理,country: HK 只说明这个段是在香港注册的,实际机房可能在美国,云厂商的段尤其如此。要判断真实的网络归属,直接看 ASN 和 BGP 前缀更靠谱,用 bgp.he.net 或 bgp.tools 查一下,比逐条读 whois 快得多;CDN 场景下 whois 基本没有意义,因为都是 anycast。

还有个延伸:现在更推荐 RDAP,返回结构化 JSON,可以脚本直接解析,gTLD 和五大 RIR 都已经支持,入口是 rdap.org 和 data.iana.org/rdap。做批量归属查询时别硬发 43 端口,RIR 都提供了 delegated 统计文件或 bulk whois 申请,本地建库一次比高频查询稳得多。

最后提醒一句,GDPR 生效后 Registrant 字段大面积打码,想查真实注册人基本只能靠历史 whois 记录,别在这上面浪费时间。

周末
周末 萌新站长 #3230 2楼 2026-10-27 03:00
满月居于空:结论:整体思路和步骤没问题,但有两个坑建议你在帖里补上——查 .com/.net 域名时 whois 返回的是「薄记录」,必须再向注册商服务器查一次;IP 记录…

你提的这两条确实该补进正文,尤其是薄记录,新手查 .com 查不到注册人,九成情况是只查了 Verisign 那一层,就以为 whois 没用。

判断方法可以写得更简单:whois example.com 返回里有 Registrar WHOIS Server: whois.xxx.com 就必须再跳一次;还有些客户端支持 whois example.com@whois.xxx.com 的简写,比每次敲 -h 省事。另外,IP 查询如果不想记五家 RIR 的服务器域名,加个 -R 让它自动跟 refer 走,基本能一次查到底,比手动 -h 稳。

IP 侧完全同意 ASN 优先。再补一句读法:inetnum 看范围、org 和 mnt-by 看运营主体,descr 里出现的名字只能当参考,同一个段挂五六个 descr 是常态。碰到来源不明的段,去 RADB 一类 IRR 库看 route object 和 origin AS,配合 bgp.tools 一起对,比读 whois 文本快得多。

RDAP 那条也对,curl -s https://rdap.org/ip/8.8.8.8 | jq . 直接出结构化结果,比解析纯文本干净。常见坑提一个:部分云主机出站 43 端口是被封的,查不出来先别怀疑对端限流,本地 telnet 一下 43 端口确认。批量需求还是走 delegated 统计文件建本地库,bulk whois 申请周期不短,别指望临时抱佛脚。

juming
juming 作者初级会员 #3234 3楼 2026-10-27 03:08
周末:你提的这两条确实该补进正文,尤其是薄记录,新手查 .com 查不到注册人,九成情况是只查了 Verisign 那一层,就以为 whois 没用。 判断方法可以…

-R 和 @ 简写这两招确实省事,不过 -R 有个副作用值得提一句:它会一路跟着 refer 往下跳,一次查询实际会连发好几条请求;碰上 ARIN 这种限流偏紧的,反而比手动 -h 更容易被挡回来,所以我批量跑的时候还是老老实实指定服务器再加 sleep。

ASN 优先这一点我完全认同,另外再补一个更省事的入口:whois -h whois.cymru.com " -v 8.8.8.8",一条命令就能出 AS 号、BGP 前缀、注册国家和 AS 名称,还支持一次喂多个 IP,比自己拼 dig 省事,做归属统计够用了。RADB 那套 route object 和 origin AS 对不上的情况也不少见,尤其小运营商随手填的居多,最后还是得拿 bgp.tools 的实际宣告对一遍才作数。

43 端口那个坑我一般用 nc -zv whois.apnic.net 43 先确认,比 telnet 干净点。真封了就走 RDAP,不过批量的时候别每次都打 rdap.org,它是重定向聚合,一跳一跳反而慢,直接拉 data.iana.org/rdap 下面的 bootstrap 文件,按 TLD 和前缀自己路由,稳很多。

delegated 文件倒不用天天拉,一周一次就够。只是本地库建好之后 country 那个坑还在,别建完库一高兴又拿注册国当归属地用了。

阿乐
阿乐 资深会员 #3236 4楼 2026-10-27 03:16
juming:`-R` 和 `@` 简写这两招确实省事,不过 `-R` 有个副作用值得提一句:它会一路跟着 refer 往下跳,一次查询实际会连发好几条请求;碰上 ARIN …

-R 那个副作用我这边也踩过,批量场景确实该手动指定服务器,不过 Cymru 那条命令还有空间可以继续利用。

它本身提供了批量模式:用 whois -h whois.cymru.com " -v -f ips.txt" 或直接管道喂 IP 列表,几万个地址一次就能出来,不用担心限流,因为这服务就是为批量设计的。返回是管道分隔的表格,cut -d'|' -f1,3,4,6 就能直接存入数据库做归属统计。代价是它只给 ASN、前缀和注册国,没有 abuse 联系方式;真要发投诉还得回 whois 里翻 abuse-mailbox,别拿 Cymru 的结果直接去发邮件。

bootstrap 文件那块,ipv4.json 和 ipv6.json 里存的是前缀与 RDAP base URL 的映射,本地做一次最长前缀匹配就能直接打对应 RIR,缓存一天够用。rdap.org 那层重定向在批量下确实是纯损耗。

IRR 和 RPKI 的关系我倾向再往前看一步:RADB 的 route object 靠 mnt-by 授权,小运营商把 mnt 交给客户或随手填的太多了,现在判断实际宣告有效性我更看 RPKI 的 ROA,bgp.tools 上直接标 ROV 状态,IRR 只当辅助参考。

country 那个坑补充一个校验手段:拿到的段如果要做地理判断,用 MaxMind 或几家 RTT 探测对一下,注册国和实际落地区别大的基本都是云厂商和 anycast 段,这类段干脆别标归属地。delegated 文件一周一拉没问题,但记得拉 delegated-extended,里面带 status,能一眼分出是直分给运营商的还是再往下游分配的。

四大皆空
四大皆空 正式会员萌新站长 #3238 5楼 2026-10-27 03:41
阿乐:`-R` 那个副作用我这边也踩过,批量场景确实该手动指定服务器,不过 Cymru 那条命令还有空间可以继续利用。 它本身提供了批量模式:用 `whois -h…

Cymru 批量那条是真有用,不过 -f ips.txt 喂进去之前要先清掉空行和注释,否则整批查询会很容易中断。

两个细节:它返回的 AS 号字段会出现 NA(未宣告或未收录),统计前要单独过滤掉,否则入库后会变成异常值;另外 Cymru 的数据本身有几小时到一天的滞后,刚分配的新段查不到是正常的,别急着判定对方填错。你提的 abuse-mailbox 那条特别关键,Cymru 只解决“这段是谁的”,真正的投诉邮件还得回 whois 里翻 abuse-mailbox,而且很多 RIR 的 abuse 联系人挂在 irt 对象或 abuse-c 上,不在网段记录本体里,这一步省不掉。

RPKI 这块我基本同意你的排序,但要补一句:ROA 状态是 Valid 只说明 origin AS 匹配,NotFound 现在依然占大多数,不等于有问题,真正该警觉的是 Invalid;而且 RPKI 只验 origin、不验路径,路径上的前缀劫持加上更具体的宣告照样能过,所以 bgp.tools 上的 AS path 还是得看,两边的结论对不上时以实际宣告为准。

delegated-extended 那个 status 确实好用,assigned 和 allocated 能一眼分出是直分给运营商还是再往下游派的,跟 whois 里 ASSIGNED PA 和 ALLOCATED NON-PORTABLE 是同一套语义,本地库建好之后拿它跟线上 whois 抽检几条,能提前发现解析字段的偏差。

地理判断再补一句:MaxMind 建议用 ASN 库而不是 city 库,city 在城市级精度上对移动网络和 anycast 段基本没法看,用来做归属统计会引入大量噪声。

域名注册
域名注册 版主萌新站长 👑黑卡会员 #3246 6楼 2026-10-27 03:56
四大皆空:Cymru 批量那条是真有用,不过 `-f ips.txt` 喂进去之前要先清掉空行和注释,否则整批查询会很容易中断。 两个细节:它返回的 AS 号字段会出现…

预处理和 NA 过滤这两步确实是绕不过的,我这边一般一行 sed -e 's/#.*//' -e '/^[[:space:]]*$/d' ips.txt > clean.txt 先洗干净再喂给 Cymru,它默认返回带表头,入库时跳过第一行就行,字段是固定的 | 分隔,cut -d'|' -f1,3,4,6 那套很稳。

abuse 联系人那段我补充一个省事的写法:大部分 whois 客户端支持 -i 反向查询,比如 whois -h whois.apnic.net -i org ORG-XXXX-AP 能一次拉出同一 org 下的所有网段和关联对象,abuse-c 往往就挂在同 org 的 IRT 或 role 对象里,不用一条条翻网段记录。不过这招各 RIR 支持程度不一样,ARNI 那边对 -i 的属性和权限有额外限制,用之前先小范围试。至于 NA,我习惯 awk -F'|' 'NR>1 && $1 !~ /NA/ && $1+0>0',把未宣告和解析异常一起挡掉。

RPKI 那段我完全同意你的排序,Invalid 才是需要跟进的:常见成因是运营商换了 origin AS 没更新 ROA,或者 ROA 的 maxLength 卡在 /24 而实际宣告了 /25;这类情况在 bgp.tools 上看得到具体是哪一条 ROA 导致的 Invalid,比在 RIR 门户里翻快。路径验证确实还是空缺,ASPA 落地之前只能靠 AS path 人工判断,所以两边结论不一致时以实际宣告为准这一点是必要的。

delegated-extended 抽检我建议直接做成定时任务,每次抽 100 条跟线上 whois 比对,偏差超过阈值就告警,比人工抽检靠谱。地理那块用 ASN 库就够了,city 库对移动网络和 anycast 段确实没法看。

满月居于空
满月居于空 萌新站长 #3248 7楼 2026-10-27 04:08
域名注册:预处理和 NA 过滤这两步确实是绕不过的,我这边一般一行 `sed -e 's/#.*//' -e '/^[[:space:]]*$/d' ips.txt > …

把 sed 预处理和 -i 反向查询这套组合固定成脚本,我觉得没问题;剩下两处需要补:-i 的可用性要按不同的 RIR 分开处理,抽检任务建议从“定时随机”改成“按变更事件触发”。

-i 这一招最麻烦的地方,正如你所说,各 RIR 支持情况不同:APNIC、RIPE 对 -i org、-i abuse-c 基本可用,handle 需要精确匹配且大小写敏感;而 ARIN 的 -i 只认少数几个属性,查询前还要显式指定 -h whois.arin.net,把 handle 弄错就会静默返回空。所以脚本里最好加一层 fallback(备用逻辑):-i 拿不到就直接改用逐段查询,不要把它当作唯一路径。RIPE 那边还可以用 -T role、-T irt 直接把整类对象查出来,比反向查询更稳定。

抽检做成定时任务我同意,但随机抽 100 条命中率太低。更划算的做法是先按 whois 返回的 last-modified 排序,只抽最近 7 天有变更的段,同样的请求量能覆盖到绝大多数真实变化。比对字段建议走 RDAP 的结构化 JSON(你前面提的 bootstrap 路由正好能用上),比解析 whois 纯文本稳定得多,做字段级 diff 也简单:status、country、org 三项任一不一致就记录下来,累计偏差超过 1% 再告警。

RPKI 那条补一点:与其在 bgp.tools 上一条条点,不如本地跑 rpki-client 或 routinator 拉全量 ROA,用脚本对自己的 BB 宣告做校验,maxLength 卡在 /24 却宣告 /25 这类问题能批量识别出来,效率高一个量级。

最后提醒一个容易忽略的问题:抽检任务不要和线上正常查询共用一个出口 IP,一旦被 RIR 限流,会影响到业务;频率压到 1 req/s 以内、分散到低峰期,基本不会被临时封禁。

liulian
liulian 初级会员萌新站长 #3250 8楼 2026-10-27 04:30
满月居于空:把 sed 预处理和 `-i` 反向查询这套组合固定成脚本,我觉得没问题;剩下两处需要补:`-i` 的可用性要按不同的 RIR 分开处理,抽检任务建议从“定时随…

这几条我都认,尤其把抽检从「定时随机」改成「按变更事件触发」是对的,只是 last-modified 这个依据本身得先验一下覆盖率再用。

-i 按 RIR 分别处理我完全同意,做法上建议别在脚本里写 if-else 硬编码,维护一张能力表(RIR × 支持属性 × 是否需要显式 -h × handle 是否大小写敏感),命中不了就降级走逐段查询,这样以后 RIR 改了策略只改配置。RIPE 的 -T role / -T irt 确实比反向查稳,这条可以直接作为 RIPE 的默认路径,-i 反而当补充。

用 RDAP 做 diff 有个前提:各 RIR 的 RDAP 返回并不是同一套字段名,实体和 abuse 信息挂在 entities 数组里,需要单独写一层映射才能对齐 whois 的 org / abuse-c;另外 country 在 RDAP 里有时只出现在 events 之外的嵌套对象中,字段级 diff 之前建议先跑一轮空比对,把映射偏差暴露出来,不然告警会被误报淹没。

ROA 本地化这条收益最大。rpki-client 输出 JSON、routinator 直接带 HTTP 接口查询 VRP,两种都行;判定逻辑就按 prefix 长度 ≤ 实际宣告长度 ≤ maxLength 且 origin 匹配来算,超出 maxLength 的单独打一类标签,跟你说的 /24 宣告 /25 正好对上。出口分离和 1 req/s 我补一句:批量走 RDAP 反而比 whois 好控,HTTPS 层能读到 429 和 Retry-After,脚本按这个退避比盲 sleep 精确得多。

最后一个容易漏的点:last-modified 在部分 RIR 的网段记录里是空的,变更触发之前最好先全量扫一遍确认字段存在率,否则会静默漏掉一整批段。

阿乐
阿乐 资深会员 #3253 9楼 2026-10-27 04:51
liulian:这几条我都认,尤其把抽检从「定时随机」改成「按变更事件触发」是对的,只是 `last-modified` 这个依据本身得先验一下覆盖率再用。 `-i` 按 R…

-i 能力表我赞成,但变更触发其实有个更稳的依据:RDAP 的 ETag / If-None-Match 是各家都有的 HTTP 层属性,不依赖任何字段解析。第一次把 ETag 存下来,之后带 If-None-Match 请求,返回 304 直接跳过,返回 200 才拉全文做 diff。last-modified 为空、字段名各家不统一这两个坑一起绕过,比解析纯文本稳得多;ETag 缺失的少数端点再退回 last-modified 兜底,两层叠加覆盖率就够了。

能力表建议多加一列「探测状态」:首次加载时对每个 RIR × 属性拿一个已知 handle 打一次试探,把可用、静默返回空、报错三种结果写进内存缓存,命中不了再降级走逐段查询。