你在编程的学习过程中,碰到问题了么?来看看这篇博客能否解决吧!
⛳️ 实战场景
在公司编写代码的时候,会碰到这样的情况,需要检查某域名解析的目标服务器 IP,即通过域名查询其服务器地址。
在此基础上,还需要查询对应 IP 是否绑定其它站点。
为了便于分析,我们需要将解析到目标服务器的域名采集到本地。
重新梳理一下需求:
- 通过域名获取服务器 IP,使用 ping 直接实现;
- 通过服务器 IP 获取解析到该 IP 的站点域名,通过第三方站点实现;
- 下载域名保存到本地,通过
requests
模块实现。
⛳️ 第一步:通过域名获取 IP
该步骤非常简单,使用控制台即可实现,命令如下所示:
ping meituan.com
命令运行结果如下,记录该 IP 值。
⛳️ 第二步:查询 IP 绑定哪些域名
本步骤需要用到第三方工具,常用的站点有如下三个:
# IP反查绑定域名的站点
site.ip138.com
ipchaxun.com
dns.aizhan.com
参考下图输入前文得到的 IP 信息,可以查询到本 IP 绑定过的域名清单。
接下来的任务就进入编码环节了,使用 requests
模块请求站点,并采集数据。
⛳️ 第三步:采集域名清单
模块安装不做过多说明,直接进行编码实践,对目标页面进行简单分析,尝试获取接口。
多次测试找到如下接口信息。
记录如下内容:
- 接口地址:https://site.ip138.com/index/querybyip/
- 请求方式:GET
- 请求参数:ip=101.236.12.4&page=2&token=token 值,其中
ip
,page
,token
为核心值。
循环终止的条件通过对比数据得出。
成功
{"status":true,"code":21000,"msg":"\u8fd4\u56de\u6210\u529f","data":[{"domain":"bazhong.meituan.com","addtime":"20190814","uptime":"20220716"},……]}
失败
{"status":true,"code":21000,"msg":"\u8fd4\u56de\u6210\u529f"}
成功与失败的返回结果差异在 data
参数值中。
基于上述整理,编码如下:
import time
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
"Host": "site.ip138.com",
"Referer": "https://site.ip138.com/101.236.12.4/"}
def get_domain(url):
res = requests.get(url, headers=headers)
print(res.text)
return res.json()
if __name__ == '__main__':
page = 0
while True:
page += 1
base_url = f'https://site.ip138.com/index/querybyip/?ip=101.236.12.4&page={page}&token=可以直接复制接口中的数据'
print("正在采集",base_url)
data = get_domain(base_url)
if "data" not in data:
break
time.sleep(3)
代码运行之后,即可获取最终结果。
接下来的事情就交给大家独立完成了,需要将采集的 JSON 数据通过 Python 对应模块,保存到数据库或者本地文件中。
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 734 篇原创博客
从订购之日起,案例 5 年内保证更新
本文含有隐藏内容,请 开通VIP 后查看