吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3436|回复: 10
收起左侧

[Python 转载] 批量查询域名的IP地址

  [复制链接]
kinfang 发表于 2021-11-11 18:26

*python新手,如果有不好的地方欢迎指出,谢谢。***

1、功能

实现批量查询域名的IP地址,循环执行。加入循环是为了解析结果能尽量全。
可使用自定义DNS(默认为本机DNS),自定义循环次数(默认3次)。
2.png
结果:
1.png

2、说明

同一目录下建立domain.txt文件,存放需要查询的域名

file = './domain.txt'   # 域名文件,可自定义文件

输出文件配置,输入为csv格式

 dst_file = './domain_result.csv'

3、完整代码

# BY KinFang
import os
import csv
import subprocess

file = './domain.txt'
# dst_file = 'd:/domain_result.txt'
dst_file = './domain_result.csv'

# 去重
def DeDuplication(old_list):
    new_list = [list(t) for t in set(tuple(_) for _ in old_list)]  # 将源列表转换成集合,去重
    # print(new_list)
    sorted_list = sorted(new_list)
    with open(dst_file, 'w', encoding='utf-8', newline='') as f:
        csvwrite = csv.writer(f)
        csvwrite.writerows(sorted_list)

def find_domain(domain, result_list):
    if dns == '':
        ret = subprocess.getoutput(f'nslookup {domain}')
    else:
        ret = subprocess.getoutput(f'nslookup {domain} {dns}')
    lst = ret.split('\n')  # str转为list
    # print(lst)

    for item in lst[6:]:  # 从第7个元素开始循环
        if item.startswith('Aliases'):  # 循环到列表中的Aliases开头就停止循环
            break
        else:
            if item.startswith('Address') or item.startswith('\t'):  # 匹配ip地址,有以address开头,有以\t开头
                if 'Address' in item:
                    newline = item.split(': ')[1].strip()
                else:
                    newline = item.split(': ')[0].strip()
                result_list.append([domain] + [newline])

def readconfig(result_list):
    with open(file, 'r', encoding='utf-8') as f:
        for line in f:
            if line.startswith('#'):
                continue
            new_line = line.strip()
            find_domain(new_line, result_list)

def main():
    result_list = []
    # 读取域名文件
    print('-' * 30)
    print(f'每个域名将执行{num}遍')
    print('-'*30)
    for i in range(1, num + 1):
        print(f'第{i}遍开始执行...')
        readconfig(result_list)
    # print(result_list)
    print('-' * 30)
    print('结果处理中...')
    print('-' * 30)
    # 对数据进行去重
    DeDuplication(result_list)

if __name__ == '__main__':
    if not os.path.exists(file):
        print('domain.txt文件不存在,请先创建文件')
        os.system('pause')
        exit()
    for i in range(3):
        try:
            dns = input('请输入DNS地址(不输入将采用本机默认DNS):').strip()
            num = input('输入需要循环几次(默认3次):').strip()
            if num == '':
                num = 3
            else:
                num = int(num)
            main()
            print('执行完成!!!')
            print()
            break
        except:
            print('输入有误,请重输!')
    os.system('pause')
    exit()

免费评分

参与人数 10吾爱币 +7 热心值 +9 收起 理由
hwh425 + 1 谢谢@Thanks!
romark + 1 + 1 我很赞同!
yys227 + 1 + 1 我很赞同!
ctfy55 + 1 我很赞同!
swordxia + 1 谢谢@Thanks!
YiChZ + 1 + 1 我很赞同!
15360438 + 1 + 1 谢谢@Thanks!
1980000 + 1 + 1 用心讨论,共获提升!
XX886 + 1 鼓励转贴优秀软件安全工具和文档!
langtaomi + 1 + 1 感谢大佬解析,学到了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
YYDSY 发表于 2021-11-11 19:11
提示: 作者被禁止或删除 内容自动屏蔽
风逝998 发表于 2021-11-11 20:01
wtq1314 发表于 2021-11-11 20:27
zucker 发表于 2021-11-12 09:40
如果用了cdn的还准吗
g0101s 发表于 2021-11-12 10:31
拿走,感谢大佬分享
hailaoda 发表于 2021-11-12 10:58
刚入门Python,感谢分享。学习学习。
 楼主| kinfang 发表于 2021-11-12 16:25
zucker 发表于 2021-11-12 09:40
如果用了cdn的还准吗

跟CDN没关系的,这个是对域名做解析,就算是CDN也会解析出来IP地址的,只是说CDN会更多的IP,所以使用循环能够多次解析同一个域名,能尽量把IP解析全。
zucker 发表于 2021-11-15 10:06
kinfang 发表于 2021-11-12 16:25
跟CDN没关系的,这个是对域名做解析,就算是CDN也会解析出来IP地址的,只是说CDN会更多的IP,所以使用循 ...

肯定想要服务器真实ip地址
 楼主| kinfang 发表于 2021-11-15 11:43
zucker 发表于 2021-11-15 10:06
肯定想要服务器真实ip地址

这个还真没办法知道
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表