python获取域名对应的ip_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)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值