09python实现DNS查找域名对应的IP地址

# DNS:是一个UDP层上边的协议,用于将域名转换成IP地址,在我们平时浏览网页的时候,
# 这个我们平时用到的特别多的,在我们打开浏览器进行搜索网页的时候,不是填入IP地址进行
# 搜索的,而只是输入域名,DNS协议会将域名解析成IP地址,然后记性寻找我们访问的网页。
from scapy.all import *
# 传入两个参数,域名和域名服务器。
def dns_query(dns_name,dns_ip):
    # 首先构造一个DNS的包,IP的目的地址为第一个域名服务器地址,UDP字段让scapy自己填写,后边我们填写DNS字段的选项部分。
    # 这里是收一个包,发送一个包。
    dns_response = sr1(IP(dst = dns_ip)/UDP()/DNS(id=435,qr = 0,opcode=0,ra = 1,qd=DNSQR(qname=dns_name)),verbose=False)
    # print(dns_response.show())
    # 下边进行解析包。一个DNS的应答包中可能包含很多的回答,因为我们访问的域名可能有特别多的别名。
    layer = 1
    while True:
        try:
            print(dns_response.getlayer(DNS).fields['an'][layer].fields['type'])
            # 判断是否是A记录,每一层就是一个记录,但是不一定是A,可能是CNAME!
            # 只有A记录里边有IP地址,CNAME里边是别名。
            # 这里我们在A记录里边进行解析,如果不是A记录,那么就跳过。
            if dns_response.getlayer(DNS).fields['an'][layer].fields['type'] == 1:  # A记录
                # 取出IP地址。
                ip_data = dns_response.getlayer(DNS).fields['an'][layer].fields['rdata']
                print('域名为:',dns_name,'的IP地址为:',ip_data)
            layer += 1
        except Exception as e :
            # 如果错误的话,就代表着包结束了
            print("错误",e)
            break



if __name__ == "__main__":
    # 入参为要查询的域名,和第一个域名服务器的地址。
    dns_name = 'www.baidu.com'
    dns_ip = '192.168.60.14'
    dns_query(dns_name,dns_ip)

python基础教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值