在 Ubuntu 上使用 Flask 搭建自己的 Whois 查询网站

已关闭留言

Whois 信息是域名玩家每天必查的,看了很多查询 whois 信息的网站都不满意,干脆自己动手写一个。基本原理为:使用 Python,调用 Ubuntu 上的 whois 软件包,查询 whois 信息,并返回给 Flask,然后在前台进行展示。整个流程比较简单,下面看一下。

文章目录
隐藏
一、准备环境
二、获取 Whois 信息
三、返回 whois 信息
四、渲染模板
五、部署上线

一、准备环境

安装 Flask,安装 whois:

apt install -y whois
pip install flask

部署网站环境,比如 LAMP(使用 LAMP 一键包部署 Linux 建站环境)。

二、获取 Whois 信息

获取 whois 信息很简单,通过 Python 的 subprocess 调用系统的 whois 软件,就能得到 whois 信息,代码如下:

import subprocess as sp

def get_whois(domain_name):
    try:
        whois_info = sp.check_output('whois %s' % domain_name, shell=True)
        return whois_info
    except sp.CalledProcessError, e:
        return e.output

比较简单,就是调用了一句 shell,就不细说了。

三、返回 whois 信息

代码如下:

@app.route('/whois', methods=['POST'])
def whois_check():
    domain_name = request.form['domain_name']
    dn_info_str = get_whois(domain_name)
    dn_info = dn_info_str.replace('\n', '
')
    return render_template('whois_info.html', dn_info=dn_info, dn_value=domain_name)

获取了 whois 信息之后,需要返回给 Flask,上面的代码先从 request.form 里获取要查询的域名,然后调用 get_whois() 进行查询 whois,查询到信息之后格式化一下后再返回给模板进行渲染。最上面的 @app.route() 是用来定义网站路径的。

四、渲染模板

使用 jinja2 写一个展示页的目标,最简单的方法就是直接把 whois 信息展示出来,代码如下。

{% autoescape false %}
 {{ dn_info }}
{% endautoescape %}

具体的就自己看 jinja2 的文档吧,就是一些语法问题。

五、部署上线

推荐使用 CN2 GIA VPS 来部署网站:《好用性价比高的美国洛杉矶 CN2 GIA 便宜 VPS 推荐》

最简单的部署方法就是直接 nohup 后台运行。

nohup python -u pywhois.py > out.log 2>&1 &

网站的配置(以 LAMP 为例)如下:

<VirtualHost *:80>
ServerName YOURDOMAIN.NAME
ServerAlias YOURDOMAIN.NAME www.YOURDOMAIN.NAME
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ErrorLog  /data/wwwlog/YOURDOMAIN.NAME/error.log
TransferLog  /data/wwwlog/YOURDOMAIN.NAME/access.log
</VirtualHost>

主要就是把 localhost 的 5000 端口,也就是 Flask 的运行端口,映射到公网的 80 端口。

至此,整个 whois 网站就上线了,具体代码请前往我的 Github 查看:

https://github.com/ztang/Python-Whois