Python根据域名批量获取IP地址和经纬度(2021.12.1)

Python批量获取域名对应的IP地址和经纬度

  • 1、DN、DNS、URL简介
    • 1.1 域名
      • 1.1.1 不同类型的域名
        • 1.1.1.1 TLDs: Top-Level Domains 顶级域
        • 1.1.1.2 ccTLDs: Country-Code Top-Level Domains 国家/地区代码顶级域
        • 1.1.1.3 gTLDs: Generic Top Level Domains 通用顶级域
        • 1.1.1.4 Other Domain Name Types 其他域名类型
          • 1.1.1.4.1 二级域
          • 1.1.1.4.2 子域
          • 1.1.1.4.3 自由域
    • 1.2 DNS
    • 1.3 IP地址
    • 1.4 URL
  • 2、查询域名对应的IP地址或地理位置(以baidu.com为例)
    • 2.1 本机 ping(联网)
    • 2.2 一些提供域名查询IP或地理位置服务的网站
      • 2.2.1 站长之家(IP+地理位置)
      • 2.2.2 ip.cn(IP+地理位置)
      • 2.2.3 ip138(IP+地理位置)
      • 2.2.4 ip.tongmengguo(IP+地理位置)
      • 2.2.5 ip.chacuo(IP+经纬度+地图定位)
      • 2.2.6 ip.yqie(IP+地理位置+地图定位)
      • 2.2.7 netcraft(IP+地理位置+网站排名)
      • 2.2.8 IPAddress(IP+地理位置+经纬度+地图定位+访问排名 推荐使用)
  • 3、Python批量获取记事本中域名的IP地址和经纬度实例(利用IPAddress网站接口)
    • 3.1 IPAddress网站分析(以baidu.com为例)
      • 3.1.1 Domain Summary
      • 3.1.2 IP Address and Server Location
      • 3.1.3 Website and Web Server Information
    • 3.2 Python代码实现(Python 3.8.3)
      • 3.2.1 根据域名获取IP和经纬度的自定义函数代码 GetIPByDomainName.py
      • 3.2.2 新建InputParameterInvokeGetByDomainName.py利用cmd命令行传参调用GetIPByDomainName
      • 3.2.3 准备域名数据文件 domains.txt
      • 3.2.4 新建Invoke.py调用GetIPByDomainName来批量获取domains.txt中所有域名的IP地址和经纬度
      • 3.2.5 改写Invoke.py调用GetIPByDomainName来批量获取domains.txt中所有域名的IP地址(更新本地hosts文件)

1、DN、DNS、URL简介

        域名Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时指地理位置),它由一串用点分隔的名字组成,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

1.1 域名

        域名是由网站名和域名扩展名组成的网址。名称由字母、数字、连字符组成,而域扩展通常是几个字母的组合。如果没有域名,那么用户只能使用互联网协议IP地址访问网站。但IP地址很难记住,因此域名的目的是帮助访问者找到一个网站。
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第1张图片

1.1.1 不同类型的域名

        由域名和扩展名组成的域名是互联网基础设施的关键部分,因此包含多种不同的类型。域名是网站的物理地址的等价物,它能够帮助用户在浏览器上轻松找到服务器站点,而不是使用其IP地址。

1.1.1.1 TLDs: Top-Level Domains 顶级域

        顶级域是域名扩展,但.com是最受欢迎的扩展,超过52%的网站都有TLD。使用一个更流行的扩展驱动更高的有机流量,因为用户通常在默认情况下编写它。

1.1.1.2 ccTLDs: Country-Code Top-Level Domains 国家/地区代码顶级域

        国家/地区代码顶级域是特定于特定国家/地区的扩展,它由两个基于国际国家代码的字母组成。举例来说,日本的站点可使用.jp作为扩展名,而巴西的站点使用.br,英国广播公司使用BBC.co.uk面向英国读者,使用BBC.com面向国际观众。这样依赖,国际公司就可以区分不同地区的内容。

1.1.1.3 gTLDs: Generic Top Level Domains 通用顶级域

        通用顶级域是不依赖国家代码的扩展,这些扩展是由指定的机构或组织赞助的。但一些通用TLD仅限于特定类型的注册人。如学术机构可以使用.edu政府机构可以使用.gov

1.1.1.4 Other Domain Name Types 其他域名类型

1.1.1.4.1 二级域

        二级域SLD)位于域名层次结构中TLD的下方。SLD是位于最后一个点左侧的域名部分,以www.baidu.com为例,baiduSLD,而.comTLD

1.1.1.4.2 子域

        子域是一个独立于较大域的分区,但仍然共享相同的服务器。不需要购买和注册子域。从技术上讲,大多数URL上的www是一个子域,表示站点是万维网的一部分。子域最常见的用途是将web内容组织并划分为单独的部分。例如谷歌使用developers.Google.com为开发者提供特定信息。它的另一个用途是创建另一个名称相同但语言不同的网站,以维基百科为例,每种语言都有一个单独的子域:英语版本使用en.wikipedia.org,西班牙语版本使用es.wikipedia.org

1.1.1.4.3 自由域

        一些网站建设者的管理系统经常为新用户提供免费域名,免费web地址通常使用与子域相同的结构,这样初学者在投资网站之前会利用这个机会创建自己的网站。
        关于域名,还应注意以下几点

  1. 每个域名都连接到一个IP地址,DNS服务器将两者连接起来;
  2. 所有值得信赖的域名注册人都收集在ICANN数据库中;
  3. 服务器负责存储网站的文件;
  4. com是最受欢迎的顶级域名,超过52%的网站使用它;
  5. 特定国家/地区的网站使用国家/地区代码;
  6. 一些GTLD仅适用于特定的用例,例如用于学术机构的.edu
  7. 更流行的域名往往更昂贵
  8. 每个域名注册商都有不同的注册流程;
  9. 有域名生成器可以帮助查找可用名称;
  10. 域名可以从一个提供商转移到另一个提供商。

1.2 DNS

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第2张图片

        把域名翻译成IP地址的软件称为域名系统,即DNSDNSDomain Name Server域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名和与之相对应的IP地址的表,以解析消息的域名,解析过程如下图所示。
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第3张图片
        在互联网上,域名解析由域名系统(DNS)处理。使用DNS,可以使用host.domain格式的名称来代替目标的IP地址。当连接启动时,源主机将从DNS服务器请求目标主机的IP地址。DNS服务器将使用目标的IP地址进行回复。然后,该IP地址将用于发送到该名称的所有通信。
        每个网站都有以下两个主要元素:域名和web托管服务器。每个域都链接到一个IP地址(域名指向承载站点的web服务器),当用户在浏览器中输入域名时,服务器将通过组成域名系统(DNS)的全局服务器网络进行搜索。DNS服务器将搜索与域名关联的IP地址。包含有关IP地址信息的服务器将其返回到web浏览器。然后它将从域的托管服务器请求有关站点的数据。web服务器存储网站的所有数据,包括文件、数据库和HTML代码。一旦托管服务器发回数据,web浏览器就会将其转换为用户可以访问的网页。

1.3 IP地址

        IP代表Internet协议,描述了在网络上创建和传输数据包或数据报的一组标准和要求。在计算机网络的OSI模型中,IP将被视为网络层的一部分。传统上,IP与更高级别的协议(尤其是TCP)结合使用,IP标准由RFC 791管理
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第4张图片
        IP地址是二进制数字,但它通常以十进制形式(IPv4)或十六进制形式(IPv6)表示,以便于人类读取和使用。IP地址是唯一标识网络上特定接口的数字表示,IPv4的地址长度为32位。这允许最多232个唯一地址。IPv6中的地址为128位,允许使用2128个唯一地址。两个版本的总可用地址池都因各种保留地址和其他考虑因素而减少

Class Leading
bits
Size of network
number
bit field
Size of rest
bit field
Number
of networks
Addresses
per network
Total addresses
in class
Start address End address
Class A     0     8     24     128 (27)     16,777,216 (224)     2,147,483,648 (231) 0.0.0.0 127.255.255.255
Class B     10     16     16     16,384 (214)     65,536 (216)     1,073,741,824 (230) 128.0.0.0 191.255.255.255
Class C     110     24     8     2,097,152 (221)     256 (28)     536,870,912 (229) 192.0.0.0 223.255.255.255
Class D (multicast)     1110     not defined     not defined     not defined     not defined     268,435,456 (228) 224.0.0.0 239.255.255.255
Class E (reserved)     1111     not defined     not defined     not defined     not defined     268,435,456 (228) 240.0.0.0 255.255.255.255

        目前使用的IP有两个版本:IPv4IPv6,最初的IPv4协议今天仍然在互联网和许多公司网络上使用。但IPv4无法为所有连接到Internet的设备提供足够的唯一地址。升级后的IPv6不仅大大增加了可用的地址空间,还提高IP数据包头的效率并改进了路由的安全性。IPv4地址实际上是32位二进制数,由上面提到的两个子地址(标识符)组成,分别标识网络和网络主机,虚拟边界将两者分开。因此,IP地址通常显示为0-255之间的4个八位数字,以十进制形式而不是二进制形式表示。IPv4地址由两部分组成。地址中的第一个数字指定网络,后一个数字指定特定主机子网掩码指定地址的哪个部分是网络部分,哪个部分是特定主机的地址IPv6地址由八组四个十六进制数字表示,每组数字用冒号分隔。IPv6地址示例:2DAB:FFFF:0000:3EAE:01AA:00FF:DD72:2C4A
        当以二进制表示时,任何位设置为1意味着IP地址中的对应位是网络地址的一部分。所有设置为零的位将IP地址中的对应位标记为主机地址的一部分。标记子网掩码的位必须是连续的位。大多数子网掩码以255开头。然后继续,直到网络掩码结束。C类子网掩码应为255.255.255.0
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第5张图片

        在地址空间内,某些网络是为专用网络(非公有)保留的。来自这些网络的数据包不会通过公共互联网路由,这为专用网络提供了一种在不干扰其他网络的情况下使用内部IP地址的方法。专用网络(私有网络)地址如下:

10.0.0.1 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

        此外还有某些IPv4地址被预留用于特定用途

127.0.0.0 #本地回环(主机自己的接口)
224.0.0.0 #IP多播
255.255.255.255 #广播(发送到网络上的所有接口)

1.4 URL

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第6张图片

        URL协议路径组成。协议显示站点是否具有SSL证书(http or https),但URL只有在将访问者引导到站点上的特定页面时才具有路径。虽然域名和URL统一资源定位器)有相似之处,但所指不同:URL作为一个完整的网站地址,可以将访问者引导到网站上的特定页面;域名只是URL中的一部分。

2、查询域名对应的IP地址或地理位置(以baidu.com为例)

2.1 本机 ping(联网)

        Win+ping baidu.com后回车可看到如下图所示结果,对应IP地址为220.181.38.148.

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第7张图片

2.2 一些提供域名查询IP或地理位置服务的网站

        对于一台联网的主机而言,可以利用浏览器访问网络上的一些域名服务来查找对应的IP地址或地理位置,如站长之家、ip.cn、ip138、ip.tongmengguo、ip.chacuo、ip.yqie、netcraft、IPAddress等。尽管这些网站都可以查询到域名对应的IP地址和地理位置,但最后netcraftIPAddress两个网站对查询结果显示得颇为详细,推荐使用,当然可能绝大多数人还是倾向于IPAddress

2.2.1 站长之家(IP+地理位置)

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第8张图片

2.2.2 ip.cn(IP+地理位置)

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第9张图片

2.2.3 ip138(IP+地理位置)

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第10张图片

2.2.4 ip.tongmengguo(IP+地理位置)

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第11张图片

2.2.5 ip.chacuo(IP+经纬度+地图定位)

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第12张图片

2.2.6 ip.yqie(IP+地理位置+地图定位)

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第13张图片

2.2.7 netcraft(IP+地理位置+网站排名)

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第14张图片

2.2.8 IPAddress(IP+地理位置+经纬度+地图定位+访问排名 推荐使用)

3、Python批量获取记事本中域名的IP地址和经纬度实例(利用IPAddress网站接口)

3.1 IPAddress网站分析(以baidu.com为例)

        打开IPaddress网站后,键盘按F12进入开发工具DevTools窗口后点击NetWork,然后在左侧网页搜索框中输入baidu.com后会触发请求,在右侧可以看到,分析发现是Get方式的简单请求,可以直接看到响应Response页面预览,如下图所示。
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第15张图片
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第16张图片
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第17张图片
        所以只需要根据url地址https://websites.ipaddress.com/baidu.com获取响应Response结果,然后在结果中解析即可得到页面数据。之后通过进一步分析查找发现只需要解析Domain SummaryIP Address and Server LocationWebsite and Web Server Information三个section部分即可得到想要的结果。
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第18张图片

3.1.1 Domain Summary

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第19张图片
对应解析结果及在CSDN中显示:

<table class="panel-item table table-border-row table-v"><tbody><tr><th>Domain Nameth><td><a href="https://websites.ipaddress.com/tag/baidu">baidua>td>tr><tr><th>Global Traffic Rankth><td>5td>tr><tr><th>Estimated Visitorsth><td>185.4 Million / Daytd>tr><tr><th>Estimated Page Impressionsth><td>921.6 Million / Daytd>tr><tr><th>Domain Creation Dateth><td><time datetime="1999-10-11">October 11, 1999time>td>tr><tr><th>Domain Ageth><td><time datetime="P8087D">22 years, 1 month and 20 days (8,087 days)time>td>tr><tr><th>IP Addressesth><td><ul class="comma-separated"><li>220.181.38.148li><li>220.181.38.251li>ul>td>tr><tr><th>Web Server Locationth><td> Chinatd>tr>tbody>table>
Domain Name baidu
Global Traffic Rank 5
Estimated Visitors 185.4 Million / Day
Estimated Page Impressions 921.6 Million / Day
Domain Creation Date October 11, 1999
Domain Age 22 years, 1 month and 20 days (8,087 days)
IP Addresses
  • 220.181.38.148
  • 220.181.38.251
Web Server Location China

3.1.2 IP Address and Server Location

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第20张图片
对应解析结果及在CSDN中显示:

<table class="panel-item table table-stripes table-v"><tbody><tr><th>Locationth><td>Chinatd>tr><tr><th>Latitudeth><td>34.7732 / 34°46′23″ Ntd>tr><tr><th>Longitudeth><td>113.7220 / 113°43′19″ Etd>tr><tr><th>Timezoneth><td>Asia/Shanghaitd>tr><tr><th>Local Timeth><td><time datetime="2021-12-01T11:17:38+08:00">2021-12-01 11:17:38+08:00time>td>tr><tr><th>IPv4 Addressesth><td><ul class="comma-separated"><li>220.181.38.148li><li>220.181.38.251li>ul>td>tr>tbody>table>
Location China
Latitude 34.7732 / 34°46′23″ N
Longitude 113.7220 / 113°43′19″ E
Timezone Asia/Shanghai
Local Time 2021-12-01 11:17:38+08:00
IPv4 Addresses
  • 220.181.38.148
  • 220.181.38.251

3.1.3 Website and Web Server Information

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第21张图片
对应解析结果及在CSDN中显示:

<table class="panel-item table table-border-row table-v"><tbody><tr><th>Website Abstractth><td style="line-height:150%">Baidu.com : The leading Chinese language search engine, provides "simple and reliable" search experience, strong in Chinese language and multi-media content including MP3 music and movies, the first to offer WAP and PDA-based mobile search in Chinatd>tr><tr><th>Website Hostth><td>https://www.baidu.comtd>tr><tr><th>Server Softwareth><td>BWS/1.1td>tr><tr><th>Median Page Load Timeth><td>2.753 secondstd>tr><tr><th>Number of Sites Linking Inth><td>337,910td>tr>tbody>table>
Website Abstract Baidu.com : The leading Chinese language search engine, provides "simple and reliable" search experience, strong in Chinese language and multi-media content including MP3 music and movies, the first to offer WAP and PDA-based mobile search in China
Website Host https://www.baidu.com
Server Software BWS/1.1
Median Page Load Time 2.753 seconds
Number of Sites Linking In 337,910

3.2 Python代码实现(Python 3.8.3)

环境:Python 3.8.3+requests库
Python根据域名批量获取IP地址和经纬度(2021.12.1)_第22张图片

Python根据域名批量获取IP地址和经纬度(2021.12.1)_第23张图片

3.2.1 根据域名获取IP和经纬度的自定义函数代码 GetIPByDomainName.py

GetIPByDomainName.py

import requests

def GetIPByDomainName(queryDomainName):
    r = requests.get('https://websites.ipaddress.com/' + queryDomainName)
    # print(r.status_code)  # 响应状态码
    result_txt = r.text  # 响应字符串
    result_list = result_txt.strip(',').split('\n')  # 利用换行符分隔为list对象

    myres = ''  # 以section来分割
    for line in result_list:
        line = line.strip('\n')
        if line.find('
') and line.find('
'
) >= 0: myres = line.strip(',').split(') sectionSummary_string = '' sectionLocation_string = '' sectionInformation_string = '' for every_section in myres: if every_section.find('Domain Summary') >= 0 or every_section.find('Hostname Summary') >= 0: # Domain Summary/ Hostname Summary对应的section sectionSummary_string = every_section[every_section.find('):every_section.find('
'
) + 8] elif every_section.find('IP Address and Server Location') >= 0: # IP Address and Server Location对应的section sectionLocation_string = every_section[every_section.find('):every_section.find('
'
) + 8] elif every_section.find('Website and Web Server Information') >= 0: # Website and Web Server Information对应的section sectionInformation_string = every_section[every_section.find('):every_section.find('
'
) + 8] result = { 'IPAddress': '', 'Longitude': '', 'Latitude': '', 'Location':'', 'Domain_Creation_Date': '', 'Domain_Age': '', 'Global_Traffic_Rank': '', 'Estimated_Visitors': '', 'Estimated_Page_Impressions': '', 'Website_Abstract': '', 'Website_Host': '', 'Server_Software': '', 'Median_Page_Load_Time': '', 'Number_of_Sites_Linking_In': '' } if sectionLocation_string.find('IPv6 Addresses') >= 0: result['IPAddress'] = sectionLocation_string[sectionLocation_string.find('IPv4 Addresses') + 55:sectionLocation_string.find('IPv6 Addresses') - 28].replace('
  • ', ',') else: if sectionLocation_string.find('IPv4 Addresses') >= 0: result['IPAddress'] = sectionLocation_string[sectionLocation_string.find('IPv4 Addresses') + 55:sectionLocation_string.find('') - 20].replace('
  • ',',') else: result['IPAddress'] = sectionLocation_string[sectionLocation_string.find('IPv4 Addresses') + 51:sectionLocation_string.find('')-20].replace('
  • ',',') result['Longitude'] = sectionLocation_string[sectionLocation_string.find('Longitude') + 18:sectionLocation_string.find('Timezone') - 18] result['Latitude'] = sectionLocation_string[sectionLocation_string.find('Latitude') + 17:sectionLocation_string.find('Longitude') - 18] result['Location'] = sectionLocation_string[sectionLocation_string.find('Location') + 17:sectionLocation_string.find('Latitude') - 18] result['Domain_Creation_Date'] = sectionSummary_string[sectionSummary_string.find('Domain Creation Date') + 57:sectionSummary_string.find('Domain Age') - 25] result['Domain_Age'] = sectionSummary_string[sectionSummary_string.find('Domain Age') + 43:sectionSummary_string.find('IP Address') - 25] result['Global_Traffic_Rank'] = sectionSummary_string[sectionSummary_string.find('Global Traffic Rank') + 28:sectionSummary_string.find('Estimated Visitors') - 18] result['Estimated_Visitors'] = sectionSummary_string[sectionSummary_string.find('Estimated Visitors') + 27:sectionSummary_string.find('Estimated Page Impressions') - 18] result['Estimated_Page_Impressions'] = sectionSummary_string[sectionSummary_string.find('Estimated Page Impressions') + 35:sectionSummary_string.find('Domain Creation Date') - 18] if sectionInformation_string.find('Website Title') >= 0: result['Website_Abstract'] = sectionInformation_string[sectionInformation_string.find('Website Abstract') + 50:sectionInformation_string.find('Website Title') - 18] else: result['Website_Abstract'] = sectionInformation_string[sectionInformation_string.find('Website Abstract') + 50:sectionInformation_string.find('Website Host') - 18] result['Website_Host'] = sectionInformation_string[sectionInformation_string.find('Website Host') + 21:sectionInformation_string.find('Server Software') - 18] result['Server_Software'] = sectionInformation_string[sectionInformation_string.find('Server Software') + 24:sectionInformation_string.find('Median Page Load Time') - 18] result['Median_Page_Load_Time'] = sectionInformation_string[sectionInformation_string.find('Median Page Load Time') + 30:sectionInformation_string.find('Number of Sites Linking In') - 18] result['Number_of_Sites_Linking_In'] = sectionInformation_string[sectionInformation_string.find('Number of Sites Linking In') + 35:sectionInformation_string.find('') - 10] return result if __name__ == '__main__': queryDomainName = 'github.com' result = GetIPByDomainNmae(queryDomainName) print('Domain Name: ' + queryDomainName) print('IPv4 Addresses: ' + result['IPAddress']) print('Location: ' + result['Location']) print('Longitude: ' + result['Longitude']) print('Latitude: ' + result['Latitude']) print('Domain Creation Date: ' + result['Domain_Creation_Date']) print('Domain Age: ' + result['Domain_Age']) print('Global Traffic Rank: ' + result['Global_Traffic_Rank']) print('Estimated Visitors: ' + result['Estimated_Visitors']) print('Estimated Page Impressions: ' + result['Estimated_Page_Impressions']) print('Website Abstract: ' + result['Website_Abstract']) print('Website Host: ' + result['Website_Host']) print('Server Software: ' + result['Server_Software']) print('Median Page Load Time: ' + result['Median_Page_Load_Time']) print('Number of Sites Linking In: ' + result['Number_of_Sites_Linking_In'])
  • github.com为输入域名参数的运行结果:
    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第24张图片
    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第25张图片
    baidu.com为输入域名参数的运行结果:
    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第26张图片
    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第27张图片

    3.2.2 新建InputParameterInvokeGetByDomainName.py利用cmd命令行传参调用GetIPByDomainName

    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第28张图片
    InputParameterInvokeGetByDomainName.py

    import sys
    from GetIPByDomainName import GetIPByDomainName
    
    queryDomainName = sys.argv[1]
    result = GetIPByDomainName(queryDomainName)
    print('-----------The following is the information which is corresponding to domain name : ' + queryDomainName+'-----------')
    print('IPv4 Address:   ' + result['IPAddress'])
    print('Location:   ' + result['Location'])
    print('Longitude:   ' + result['Longitude'])
    print('Latitude:   ' + result['Latitude'])
    print('Domain Creation Date:   ' + result['Domain_Creation_Date'])
    print('Domain Age:   ' + result['Domain_Age'])
    print('Global Traffic Rank:   ' + result['Global_Traffic_Rank'])
    print('Estimated Visitors:   ' + result['Estimated_Visitors'])
    print('Estimated Page Impressions:   ' + result['Estimated_Page_Impressions'])
    print('Website Abstract:   ' + result['Website_Abstract'])
    print('Website Host:   ' + result['Website_Host'])
    print('Server Software:   ' + result['Server_Software'])
    print('Median Page Load Time:   ' + result['Median_Page_Load_Time'])
    print('Number of Sites Linking In:   ' + result['Number_of_Sites_Linking_In'])
    

    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第29张图片

    3.2.3 准备域名数据文件 domains.txt

    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第30张图片
    domains.txt

    github.githubassets.com
    central.github.com
    desktop.githubusercontent.com
    assets-cdn.github.com
    camo.githubusercontent.com
    github.map.fastly.net
    github.global.ssl.fastly.net
    gist.github.com
    github.io
    github.com
    api.github.com
    raw.githubusercontent.com
    user-images.githubusercontent.com
    favicons.githubusercontent.com
    avatars5.githubusercontent.com
    avatars4.githubusercontent.com
    avatars3.githubusercontent.com
    avatars2.githubusercontent.com
    avatars1.githubusercontent.com
    avatars0.githubusercontent.com
    avatars.githubusercontent.com
    codeload.github.com
    github-cloud.s3.amazonaws.com
    github-com.s3.amazonaws.com
    github-production-release-asset-2e65be.s3.amazonaws.com
    github-production-user-asset-6210df.s3.amazonaws.com
    github-production-repository-file-5c1aeb.s3.amazonaws.com
    githubstatus.com
    github.community
    media.githubusercontent.com
    

    期望获得如下图所示的执行结果。
    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第31张图片

    3.2.4 新建Invoke.py调用GetIPByDomainName来批量获取domains.txt中所有域名的IP地址和经纬度

    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第32张图片
    Invoke.py

    from GetIPByDomainName import GetIPByDomainName
    
    print('IPv4 Address        ' + 'Location        ' + 'Longitude        ' + 'Latitude        ' + 'DomainName')
    with open('domains.txt','r') as f:
        for line in f.readlines():
            line = line.strip('\n')
            queryDomainName = line
            result = GetIPByDomainName(queryDomainName)
            print(result['IPAddress'].split(',')[0] + '  ' + result['Location'] + '  ' + result['Longitude'] + '  ' +result['Latitude'] + '  ' + line)
    print('Query Finished!')
    

    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第33张图片

    IPv4 Address        Location        Longitude        Latitude        DomainName
    185.199.108.154  Hoover, Alabama, 35244, United States  -86.8274 / 86°4938″ W  33.3555 / 33°2119″ N  github.githubassets.com
    140.82.113.21  United States  -97.8220 / 97°4919″ W  37.7510 / 37°453″ N  central.github.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  desktop.githubusercontent.com
    185.199.108.153  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  assets-cdn.github.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  camo.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  github.map.fastly.net
    199.232.69.194  St Louis, Missouri, 63145, United States  -90.4281 / 90°2541″ W  38.6423 / 38°3832″ N  github.global.ssl.fastly.net
    140.82.113.3  United States  -97.8220 / 97°4919″ W  37.7510 / 37°453″ N  gist.github.com
    185.199.108.153  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  github.io
    140.82.113.3  United States  -97.8220 / 97°4919″ W  37.7510 / 37°453″ N  github.com
    140.82.113.6  United States  -97.8220 / 97°4919″ W  37.7510 / 37°453″ N  api.github.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  raw.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  user-images.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  favicons.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  avatars5.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  avatars4.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  avatars3.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  avatars2.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  avatars1.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  avatars0.githubusercontent.com
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  avatars.githubusercontent.com
    140.82.113.10  United States  -97.8220 / 97°4919″ W  37.7510 / 37°453″ N  codeload.github.com
    54.231.135.185  Ashburn, Virginia, 20149, United States  -77.4903 / 77°2925″ W  39.0469 / 39°248″ N  github-cloud.s3.amazonaws.com
    52.217.80.132  Ashburn, Virginia, 20149, United States  -77.4903 / 77°2925″ W  39.0469 / 39°248″ N  github-com.s3.amazonaws.com
    54.231.131.17  Ashburn, Virginia, 20149, United States  -77.4903 / 77°2925″ W  39.0469 / 39°248″ N  github-production-release-asset-2e65be.s3.amazonaws.com
    52.216.131.131  Ashburn, Virginia, 20149, United States  -77.4903 / 77°2925″ W  39.0469 / 39°248″ N  github-production-user-asset-6210df.s3.amazonaws.com
    52.216.28.204  Ashburn, Virginia, 20149, United States  -77.4903 / 77°2925″ W  39.0469 / 39°248″ N  github-production-repository-file-5c1aeb.s3.amazonaws.com
    185.199.108.153  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  githubstatus.com
    64.71.144.202  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  github.community
    185.199.108.133  California, United States  -118.2440 / 118°1438″ W  34.0544 / 34°315″ N  media.githubusercontent.com
    

    3.2.5 改写Invoke.py调用GetIPByDomainName来批量获取domains.txt中所有域名的IP地址(更新本地hosts文件)

    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第34张图片

            为了让Invoke.py代码更具有灵活性,所以改为输入两个参数的传参脚本代码:第一个参数为字符串string类型的domains.txt(包含域名的记事本文件),第二个参数为整数int类型,0表示输出IP地址和经纬度等位置信息,而1则代表仅输出IP地址,因此改写后的Invoke.py代码如下:

    import sys
    from GetIPByDomainName import GetIPByDomainName
    
    txtfilename = sys.argv[1]
    isOnlyIP = int(sys.argv[2])
    if isOnlyIP == 0:
        print('IPv4 Address        ' + 'Location        ' + 'Longitude        ' + 'Latitude        ' + 'DomainName')
    elif isOnlyIP == 1:
        print('IPv4 Address              ' + 'DomainName')
    with open(txtfilename,'r') as f:
        for line in f.readlines():
            line = line.strip('\n')
            queryDomainName = line
            result = GetIPByDomainName(queryDomainName)
            if isOnlyIP == 0:
                print(result['IPAddress'].split(',')[0] + '  ' + result['Location'] + '  ' + result['Longitude'] + '  ' +result['Latitude'] + '  ' + line)
            elif isOnlyIP == 1:
                print(result['IPAddress'].split(',')[0] + '            ' + line)
            else:
                break
    print('Success!')
    

    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第35张图片

    185.199.108.154            github.githubassets.com
    140.82.113.21            central.github.com
    185.199.108.133            desktop.githubusercontent.com
    185.199.108.153            assets-cdn.github.com
    185.199.108.133            camo.githubusercontent.com
    185.199.108.133            github.map.fastly.net
    199.232.69.194            github.global.ssl.fastly.net
    140.82.113.3            gist.github.com
    185.199.108.153            github.io
    140.82.113.3            github.com
    140.82.114.5            api.github.com
    185.199.108.133            raw.githubusercontent.com
    185.199.108.133            user-images.githubusercontent.com
    185.199.108.133            favicons.githubusercontent.com
    185.199.108.133            avatars5.githubusercontent.com
    185.199.108.133            avatars4.githubusercontent.com
    185.199.108.133            avatars3.githubusercontent.com
    185.199.108.133            avatars2.githubusercontent.com
    185.199.108.133            avatars1.githubusercontent.com
    185.199.108.133            avatars0.githubusercontent.com
    185.199.108.133            avatars.githubusercontent.com
    140.82.113.10            codeload.github.com
    52.216.225.160            github-cloud.s3.amazonaws.com
    52.217.80.132            github-com.s3.amazonaws.com
    54.231.131.17            github-production-release-asset-2e65be.s3.amazonaws.com
    52.216.131.131            github-production-user-asset-6210df.s3.amazonaws.com
    52.216.28.204            github-production-repository-file-5c1aeb.s3.amazonaws.com
    185.199.108.153            githubstatus.com
    64.71.144.202            github.community
    185.199.108.133            media.githubusercontent.com
    

            复制运行的结果IP+多个空格+域名,然后在开始菜单打开Windows工具窗口中找到Windows PowerShell后右键以管理员身份运行输入下图命令打开hosts文件后粘贴到底部保存,最后在命令行中输入命令ipconfig /flushdns刷新本地DNS缓存。
    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第36张图片
    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第37张图片
    Python根据域名批量获取IP地址和经纬度(2021.12.1)_第38张图片

    你可能感兴趣的:(Python实践经验,Python,DNS,IP,IPAddress,Hosts)