python实现dns劫持_python实现dns解析

dnspython模块中最常用的域名查询,它提供了一个DNS解析器类resolver,使用resolver的query方法来实现域名的查询功能。

1.模块库安装

pip install dnspython

2.指定DNS服务器

my_resolver = dns.resolver.Resolver()

my_resolver.nameservers = [DNS_Server]

3.query方法的定义

query(self,qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_no_answer=True, source_port=0)

参数说明:

qname表示待查询的域名,例如:www.baidu.com;

rdtype用来指定待查询的类型,如A记录、MX记录、NS记录等;

rdclass用来指定网络类型,如IN、CH、HS等,默认为IN;

tcp用来指定查询时是否使用TCP协议,默认为False(即使用UDP);

source和source_port用于指定查询源地址与端口,默认为查询设备IP和0端口raise_on_no_answer用来指定当查询无应答时是否触发异常。

4.代码实现

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

#说明1:DNS的模块库是dnspython,在电脑上需要安装pip install dnspython

import dns.resolver

#说明2:指定DNS解析的服务器为192.168.0.1,若不指定,则使用网卡配置的DNS地址

DNS_Server="192.168.0.1"

my_resolver = dns.resolver.Resolver()

my_resolver.nameservers = [DNS_Server]

#说明3:定义函数,方便重复利用,指定源地址进行指定域名和记录类型的dns解析

def DNS_Query(domain_name,domain_type,source_ip):

try:

A= my_resolver.query(domain_name,domain_type,source=source_ip)

for i in A.response.answer:

print(i.to_text())

#for j in i.items:

#print(j.to_text())

except Exception as e:

print (domain_name,domain_type,'Error: unable to start thread')

#说明4:指定源IP为192.168.0.2进行www.baidu.com的A记录解析

DNS_Query("www.baidu.com","A","192.168.0.2")

上述代码执行结果

www.baidu.com. 524 IN CNAME www.a.shifen.com.

www.a.shifen.com. 147 IN A 180.101.49.12

www.a.shifen.com. 147 IN A 180.101.49.11

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值