域名和IP地址信息是非常基础的情报信息,目前网上有很多网站都提供了域名信息的查询、IP地址及归属地的查询。本文通过Python Flask实现域名及IP情报信息的聚合网站。
因为域名和IP地址信息会有变化,为了减少接口压力,做了本地数据库的存储,新鲜度保存一周,每次查询先从本地数据库获取信息,如果本地库信息有并且没有超过一个星期就从本地库取,没有就从其他网站获取,并更新到本地库。
一、获取域名WHOIS信息
网上提供域名WHOIS信息查询的网站有很多,这里以http://whois.chinafu.com 为例实现WHOIS信息的查询和解析。
1 | import requests |
这里为了减少直接从其他网站获取WHOIS信息的压力,做了本地数据库的存储,每次先从本地数据库取WHOIS的信息,如果本地库信息有并且没有超过一个星期就从本地库取,没有就从其他网站获取,并更新到本地库。这里getWhoisInfoFromDB实现了取新鲜度为1周的数据,addchinafuWhoisInfo2DB实现将获取的信息保存到本地数据库。
二、根据域名解析出IP
根据域名解析出IP代码:
1 | def getIPbyDomain(domain): |
三、获取IP信息
获取IP信息的API接口也有很多,有淘宝的 https://ip.taobao.com/outGetIpInfo 、IPINFO http://ipinfo.io/、IPAPI http://ip-api.com/ 以及GeoLite2离线库等。
从淘宝IP获取IP信息
1 | def getipinfobytaobao(ip): |
从ipinfo.io获取IP信息
1 | def getipinfobyipinfo(ip): |
从ip-api.com获取IP信息
1 | def getipinfobyipapi(ip): |
从GeoLite离线库获取IP信息
如何获取GeoLite离线库及如何读取,详见:http://xiejava.ishareread.com/posts/2c5697c0/
1 | def getipinfobygeoip2(ip): |
四、搭建一个FLASK Web应用来查询聚合的域名、IP情报信息
1、FLASK Web应用的工程组织
2、配置数据及读取配置数据
1)配置数据
配置数据分别放在.env及.flaskenv中,其中.env
放的是工程中用到的数据库链接等比较私密的配置信息。.flaskenv
放的是Flask运行环境的信息
.env的配置信息参考如下:
1 | DEV_DATABASE_URI = 'mysql+pymysql://dbuser:yourpassword@127.0.0.1:3306/infocol_db_dev?charset=utf8' |
.falskenv配置信息参考如下:
1 | FLASK_ENV=development |
2)实现读取配置数据
通过config.py实现配置数据的读取及管理
1 | import os |
3、界面及路由
界面很简单就一个域名/IP的输入框,输入域名或IP后去查询相应的域名信息或IP信息显示到界面上。
界面用jinjia2的模板
index.html代码如下:
1 | {% extends "bootstrap/base.html" %} |
路由配置处理中实现了获取表单中的信息,并判断是域名还是IP如果是域名者获取whois信息,并根据域名获取IP信息。如果输入的是IP则获取IP信息,并反馈到页面上。
1 |
|
4、最终实现效果
至此通过Python快速实现了一个简单的域名、IP信息聚合网站
全部源代码:https://github.com/xiejava1018/infocollect
演示地址:http://test.ishareread.com/
博客:http://xiejava.ishareread.com/
关注:微信公众号,一起学习成长!