python dns请求

一、DNS

 dns(domain name system)域名系统 ,主要用来把主机名转换成ip地址。其至今能存在的原因有两个:

  • 能使人们记住名字,而不是ip地址;
  • 允许服务器改变地址,但使用相同的名

二、socket.getaddrinfo(host,port,family=0,socketype=0,proto=0,flags=0)

  • 参数host为域名,以字符串形式给出一个ipv4/ipv6地址或者none;
  • 参数port,字符串形式就代表服务名,比如“ftp,http,https”,或者数字,或者none
  • 参数family为地址簇,AF_INET(IPV4)、AF_INET6(ipv6)、AF_UNIX
  • 参数socketype可以为socket.SOCK_STREAM(tcp),socket.SOCK_DGRAM(udp)
  • 参数proto通常为0可以直接忽略,就是指定协议。套接口所用的协议。如调用者不想指定,可用0。常用的协议有,IPPROTO_TCP(=6)和IPPTOTO_UDP(=17),它们分别对应TCP传输协议
  • 参数flags为AI_*的组合,比如AI_NUMERICHOST,它会影响函数的返回值 

三、dns查询

以www.baidu.com为例

 1.dns正向查询

1.1代码

1 #!/usr/bin/python
2 import sys,socket
3 
4 result=socket.getaddrinfo(sys.argv[1],None)
5 print(result[1][4])

1.2结果

[root@csm testpython]# python FLdnsQuery.py www.baidu.com
('14.215.177.38', 0)

2.dns反向查询

2.1代码

#!/usr/bin/env python
import sys,socket
try:
 result=socket.gethostbyaddr(sys.argv[1])
 print "hostname is "+result[0]
except socket.herror,e:
 print "can't look up"

2.2结果

[root@csm testpython]# python RLdnsQuery.py 127.0.0.1
hostname islocalhost

 

 

转载于:https://www.cnblogs.com/csms/p/10154701.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DNS服务器通常需要两个主要组件:查询解析和响应生成。以下是一个简单的Python示例,演示如何实现一个基本的DNS服务器: ```python import socket # DNS查询解析 def parse_dns_query(data): # 解析DNS查询请求 # 返回请求域名 return domain_name # DNS响应生成 def generate_dns_response(data): # 从请求中解析出请求域名 domain_name = parse_dns_query(data) # 构造DNS响应报文 # 返回响应报文 return response_data # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定UDP套接字到指定IP和端口 server_address = ('127.0.0.1', 53) sock.bind(server_address) # 循环监听客户端DNS请求并响应 while True: data, client_address = sock.recvfrom(4096) response_data = generate_dns_response(data) sock.sendto(response_data, client_address) ``` 该示例中,`parse_dns_query`函数从DNS查询请求中解析出请求域名,`generate_dns_response`函数根据请求域名构造DNS响应报文。`parse_dns_query`和`generate_dns_response`函数中的具体实现将根据DNS协议规范进行。 接下来,创建一个UDP套接字并将其绑定到指定的IP地址和端口,然后在一个无限循环中监听客户端DNS请求并响应。当收到DNS查询请求时,该程序将调用`generate_dns_response`函数生成DNS响应报文,并将其发送回客户端。 请注意,上述示例仅演示了DNS查询解析和响应生成的基本概念。实际上,实现一个完整的DNS服务器需要更多的代码和处理逻辑,包括缓存DNS响应、处理各种DNS记录类型等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值