V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
evakiss
V2EX  ›  程序员

如何在本机用 PHP 自建一个域名查询接口

  •  
  •   evakiss · 2015-12-21 09:27:59 +08:00 via Android · 3387 次点击
    这是一个创建于 3261 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在网上想查找域名查询接口的 api ,希望免费且不限频率,但找了很久都找不到,要么有频率限制要么收费,前几天在 V2 上问了这个问题,有 V 友说用 PHP 查询 whois 信息判断域名注册了没有,如果想要更快,可以先查询该域名的 NS 记录信息,如果有 NS 记录则该域名已经注册了,这样理论上可以快很多。因为对 PHP 熟悉,所以用 PHP 的 dns_get_record 函数来获取 NS 记录,关于 PHP 查找 whois 的类,网上一搜一大把,于是测试了一下:
    电脑配置为 windows7,E1230 V3 cpu,8G 内存,四川电信 15M 带宽
    循环遍历了几百次随机域名, php 的 dns_get_record 函数每个域名平均耗时在一分钟以上,出现了好几次挂掉现象,不得不重启 nginx 重试, PHP 的 whois 查询耗时也不低,一个域名耗时也在一两分钟左右。。。
    如果把这个 dns_get_record 函数放在美国主机上是不是要快很多?另外,有没有更好的查询域名注册的办法,求众 V 友解答
    12 条回复    2015-12-21 18:33:40 +08:00
    BOYPT
        1
    BOYPT  
       2015-12-21 09:38:32 +08:00
    stream_set_timeout 设置一下查询超时。因为 php 进程被查询挂起消耗的主机资源比较多吧,是很容易弄挂掉
    crab
        2
    crab  
       2015-12-21 10:08:25 +08:00
    不是直接 53 端口查询最快吗
    evakiss
        3
    evakiss  
    OP
       2015-12-21 10:27:11 +08:00 via Android
    @crab 谢谢,能详细一点吗?
    Strikeactor
        4
    Strikeactor  
       2015-12-21 10:57:51 +08:00
    我没太懂,你的意思是,你用 dns_get_record 查域名的 NS ,平均每个域名查询时间在一分钟以上。。?
    还是说是一分钟内你遍历了一个域名下面所有常见的子域名。。
    imyip
        5
    imyip  
       2015-12-21 11:06:28 +08:00   ❤️ 1
    @crab 不是 43 端口吗?
    evakiss
        6
    evakiss  
    OP
       2015-12-21 11:16:08 +08:00 via Android
    @Strikeactor PHP 随机生成各种不同的域名比如 abc.com jdhf.con kwjd.com 等等,然后不停遍历这些域名 DNS ,平均每个域名耗时都很长很长
    loqixh
        7
    loqixh  
       2015-12-21 11:20:01 +08:00
    这东西明显不应该用 php ,而应该用 c/c++使用队列查询
    void1900
        8
    void1900  
       2015-12-21 11:38:10 +08:00
    whois 是有 whois 协议的,还有 whois 服务器:

    http://www.cnblogs.com/happyday56/p/3722571.html

    dns ? swoole 支持异步查询,速度绝对不慢:

    http://wiki.swoole.com/wiki/page/186.html
    Strikeactor
        9
    Strikeactor  
       2015-12-21 12:05:59 +08:00
    @evakiss 我觉得这个应该跟你本地网络环境有关。。我刚刚试了下,执行时间全都是毫秒级的,域名随手滚键盘,绝对没有本地缓存

    不知道你用什么 IDE ,如果是 PHPstorm 这样支持远程调试的,建议找台亚洲的 VPS (香港,日本,新加坡等)搭一个远程调试环境。 xdebug 装上之后连断点都可以远程调,同时也能避免一些本地网络环境造成的坑爹错误

    我之前用 stream 开 socket 就被本地网坑过。。
    willis
        10
    willis  
       2015-12-21 12:31:21 +08:00 via iPad
    万网有免费的接口,楼主百度下
    flashack
        11
    flashack  
       2015-12-21 14:03:24 +08:00
    建议楼主把 php 用作生成随机域名这件事上
    查询注册情况,用 ename 的工具吧,开 10 线程

    ps :搞五声?
    crab
        12
    crab  
       2015-12-21 18:33:40 +08:00 via iPhone
    @imyip 对。 whois 43 。写错了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1453 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 17:02 · PVG 01:02 · LAX 09:02 · JFK 12:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.