这是我的main.py脚本调用的函数。
这是问题所在,我有一个包含IP地址列表的文件,并且查询此API,以便针对(url)变量查找给定IP的反向DNS查找。然后吐出“ response.text”。
在response.text文件中,
我没有找到96.x.x.x的DNS A记录
我得到的其他数据只是一个dns名称:'subdomain.domain.com'
我如何过滤我的结果以使其不针对每个“找不到(显示的内容)的DNS A记录”显示
#!/usr/bin/env python3
import requests
import pdb
#function to use hackertarget api for reverse dns lookup
def dns_finder(file_of_ips="endpointslist"):
print('\n\n########## Finding DNS Names ##########\n')
targets = open("TARGETS","w")
with open (file_of_ips) as f:
for line in f:
line.strip()
url = 'https://api.hackertarget.com/reverseiplookup/?q=' + line
response = requests.get(url)
#pdb.set_trace()
hits = response.text
print(hits)
targets.write(hits)
return hits
答案 0 :(得分:0)
您可以使用re
模块来检查响应,以确保它是有效的DNS主机名(使用正则表达式模式):
import re
# ... rest of your code
# before writing to targets file
if re.match('^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$', hits) is not None:
targets.write(hits)
如果给定的字符串与正则表达式匹配,则re.match()
函数将返回一个match对象。否则,它将返回None
。因此,如果您检查以确保它不是None
,则它应该与正则表达式匹配(即,它与DNS主机名的模式匹配)。您可以更改正则表达式或将检查抽象为更通用的isValidHit(hit)
,然后将要检查的所有功能(不仅仅是DNS主机名)放在那里。
您要小心行targets = open("TARGETS","w")
。这将打开文件进行写入,但是您需要在其他位置手动关闭文件并处理与IO相关的任何错误。
每当处理文件IO时,您都应尝试使用with open(filename) as blah:
。它更安全,更容易维护。
找到here的IPv4地址的简单正则表达式。
添加更多有关正则表达式match
函数的说明。
我重新阅读了您的帖子,发现您实际上不是在寻找IPv4地址,而是DNS主机名...
在这种情况下,您只需将正则表达式模式切换为^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$
。 Source for the DNS Hostname regex。
答案 1 :(得分:0)
@Tim Klein的答案很好。但是,如问题中所述,如果您只想删除“未找到...的DNS A记录”之类的错误消息,则可以使用str.startswith
方法:
#!/usr/bin/env python3
import requests
import pdb
#function to use hackertarget api for reverse dns lookup
def dns_finder(file_of_ips="endpointslist"):
print('\n\n########## Finding DNS Names ##########\n')
targets = open("TARGETS","w")
with open (file_of_ips) as f:
for line in f:
line.strip()
url = 'https://api.hackertarget.com/reverseiplookup/?q=' + line
response = requests.get(url)
#pdb.set_trace()
hits = response.text
print(hits)
if not hits.startswith("No DNS A records found for"):
targets.write(hits)
return hits # why iterating if you return there ?