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

2015-12-21 09:27:59 +08:00
 evakiss
在网上想查找域名查询接口的 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 友解答
3415 次点击
所在节点    程序员
12 条回复
BOYPT
2015-12-21 09:38:32 +08:00
stream_set_timeout 设置一下查询超时。因为 php 进程被查询挂起消耗的主机资源比较多吧,是很容易弄挂掉
crab
2015-12-21 10:08:25 +08:00
不是直接 53 端口查询最快吗
evakiss
2015-12-21 10:27:11 +08:00
@crab 谢谢,能详细一点吗?
Strikeactor
2015-12-21 10:57:51 +08:00
我没太懂,你的意思是,你用 dns_get_record 查域名的 NS ,平均每个域名查询时间在一分钟以上。。?
还是说是一分钟内你遍历了一个域名下面所有常见的子域名。。
imyip
2015-12-21 11:06:28 +08:00
@crab 不是 43 端口吗?
evakiss
2015-12-21 11:16:08 +08:00
@Strikeactor PHP 随机生成各种不同的域名比如 abc.com jdhf.con kwjd.com 等等,然后不停遍历这些域名 DNS ,平均每个域名耗时都很长很长
loqixh
2015-12-21 11:20:01 +08:00
这东西明显不应该用 php ,而应该用 c/c++使用队列查询
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
2015-12-21 12:05:59 +08:00
@evakiss 我觉得这个应该跟你本地网络环境有关。。我刚刚试了下,执行时间全都是毫秒级的,域名随手滚键盘,绝对没有本地缓存

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

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

ps :搞五声?
crab
2015-12-21 18:33:40 +08:00
@imyip 对。 whois 43 。写错了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/244973

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX