草庐IT

php - 如何为新 gTLD 执行 Whois 查询?

coder 2024-04-17 原文

有谁知道如何为即将出现的新赞助 TLD(例如 .insurance .guru 等)执行 WhoIs 查找(PHP 或 JavaScript),它们似乎有数百个。

换句话说,随着新域的上线,将对单个 whois 服务器 Whois.net 进行通用查询?解析新域名或每个顶级域名是否会有不同的 whois 服务器。

编辑: 为了消除一些混淆 - 我正在尝试计算新 tld 的域可用性,而不是使用新 tld 的 dns 查找。尽管考虑到如果正在使用某个域,但它肯定不可用。

最佳答案

类似于DNS,域名Whois信息其实有一个根服务器:whois.iana.org

根据概念,所有 Whois 查询都应该从 whois.iana.org 开始,然后解析数据以获得指向下一个 Whois 服务器的链接等等。

不过,不久前,在您的 Whois 查找工具中为每个域名扩展简单地硬编码 Whois 服务器已成为一种规范。这会在执行 Whois 查询时节省时间,因为您跳过了一个步骤,但它需要您手动维护 Whois 查询工具以在新 TLD 发布时添加它们。

也就是说,如果您想对任何域名 执行 Whois 查询,则需要在您的脚本或工具中执行以下操作:

  1. 通过 TCP 在端口 43 上连接到 whois.iana.org

  2. 发送以下输入:tld\r\n,其中 tld 替换为域名扩展(例如 ninja) .

  3. 存储数据。

  4. 解析返回的数据以找到链中下一个 Whois 服务器的链接。

  5. 如果找到,通过 TCP 连接到端口 43 上的下一个 whois 服务器。

  6. 发送以下输入:example.tld\r\n,其中 example.tld 替换为完整域名(例如 nic .ninja).

  7. 存储数据。

  8. 解析返回的数据以找到链中下一个 Whois 服务器的链接(如果找到的话)。

  9. 通过 TCP 连接到端口 43 上的下一个 whois 服务器。

  10. 发送以下输入:example.tld\r\n

  11. 存储数据。

  12. 回显来自 Whois 服务器的所有 Whois 数据。

请注意,链中最多只有 3 个 Whois 服务器:

whois.iana.org
--> registry whois server (if found)
    --> registrar whois server (if found)

此外,某些 TLD 没有 Whois 服务器,因此 whois.iana.org 实际上是您的最后一站!

例如,nic.ninja 的 Whois 查询遵循以下路径:

whois.iana.org
--> whois.unitedtld.com

我在我自己的 Whois 查找工具上实现了这个方法,该工具可在线访问 http://gwhois.org/ .

关于php - 如何为新 gTLD 执行 Whois 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20931049/

有关php - 如何为新 gTLD 执行 Whois 查询?的更多相关文章

  1. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  2. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  3. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  4. ruby - Chef 执行非顺序配方 - 2

    我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul

  5. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  6. ruby - 为什么 Ruby 的 each 迭代器先执行? - 2

    我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试

  7. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  8. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  9. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  10. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

随机推荐