您的位置:

关于python批量解析域名a记录的信息

本文目录一览:

Python获取url中域名及从域名中提取ip的方法

这种方法为从urlparse模块中通过urlparse方法提取url通过hostname属性获取当前url的域名。

此方法是通过urllib模块中splittype方法先从url中获取到proto协议及rest结果,然后通过splithost从rest中获取到host及rest结果,此时host为域名。(rest被分割了两次)如下图:

此方法为从sokcet模块中获取到gethostbyname方法将域名传递进去就能解析出域名的ip。

此方法为通过nslookup获取域名的ip。

以上从域名中提取ip会不准确,需要设置DNS服务器,这样解析域名就准确了。

dnspython模块使用(解析域名)

import sys

import socket

import dns.resolver

print 'Argument List:', str(sys.argv)

site = sys.argv[1]

dns_server = sys.argv[2]

# Basic CNAME query the host's DNS

for rdata in dns.resolver.query(site, 'CNAME') :

print rdata.target

# Basic A query the host's DNS

for rdata in dns.resolver.query(site, 'A') :

print rdata.address

###下边是制定dns解析的服务器设置

# Setting an specific DNS Server

resolver = dns.resolver.Resolver()

resolver.nameservers = [socket.gethostbyname(dns_server)]

# Basic CNAME query with the specific DNS server

answer = resolver.query(site, 'CNAME');

for rdata in answer :

print rdata.target

# Basic A query with the specific DNS server

answer = resolver.query(site, 'A');

for rdata in answer :

print rdata.address

To run:(命令执行)

python dnsdig.py 8.8.8.8

请教一个关于 Python Requests 设置 DNS 的问题

说实话只要和 Web 相关的强烈建议先去看看 HTTP 协议的相关书籍或者 RFC。

域名在 Client 的作用是通过 DNS 解析到 Server 的 IP,但是请求需要在 Host 头中带上域名,实际请求还是发送到 IP 的。

举个例子:

GET /foo.php HTTP/1.1

Host: example.com

Connection: keep-alive

Accept-Encoding: gzip, deflate

Accept: */*

基于这个过程有两种方法来解决:

第一:基于系统环境解决。

修改本地 Host、指定 DNS

第二:自己构造请求。

这种方法需要可以自定义请求的 Host 头,并且需要自己处理解析这块。可以选择硬编码 IP 或者还是采用第一种方法实现。

可以先使用硬编码 IP 的方式来尝试一下,剩下的就是要确认使用的请求库能否支持自定义 Host 头了。

如果想进一步解决硬编码 IP 的问题,那么就需要一个 DNS 的库来获得正确的解析记录,再来发起请求。

剩下的问题就可能出在 HTTPS 上,因为证书校验是需要靠域名校验的,client 处理的方式细节不同通过 IP 发起请求可能会出现证书校验错误,粗暴的方法就是无视证书错误。