regex - Python3 - 在写入文件之前过滤文本
问题描述
这是我的 main.py 脚本调用的函数。
这是问题所在,我有一个包含 IP 地址列表的文件,我查询此 API 以便找到我对 (url) 变量的那些给定 IP 的反向 DNS 查找。然后吐出“response.text”。
那么在 response.text 文件中,
我没有找到 96.xxx 的 DNS A 记录
我得到的其他数据只是一个 dnsname: '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
解决方案
您可以使用该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()
函数将返回一个匹配对象。否则,它将返回None
。因此,如果您检查以确保它不是None
,那么它应该与正则表达式匹配(即它与 DNS 主机名的模式匹配)。您可以更改正则表达式或将检查抽象为更通用的isValidHit(hit)
,并在其中放置您想要检查的任何功能,而不仅仅是 DNS 主机名。
笔记
你要小心你的线路targets = open("TARGETS","w")
。这会打开文件进行写入,但您需要在其他地方手动关闭文件并处理与 IO 相关的任何错误。
with open(filename) as blah:
每当处理文件 IO 时,您都应该尝试使用。它更安全,更易于维护。
编辑
在这里找到 IPv4 地址的简单正则表达式。
添加更多关于正则表达式match
函数的解释。
编辑 2
我刚刚重新阅读了您的帖子,发现您实际上不是在寻找 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])$
. DNS 主机名正则表达式的来源。
推荐阅读
- database - 如何在数据库中创建组合两个或多个数字字符串的过滤器搜索
- python - 当 x 轴使用 datetime 对象时,如何使用 Matplotlib 的 PatchCollection 从误差线创建框?
- java - Command injection attack: tempered input value with &&
- firebase - How to get a list of feed items from a Query Document Snapshot?
- c# - I can't find Assembly-CSharp-firstpass.dll in a unity game folder
- mercurial - How to indicate the merge tool on command line when running `hg histedit`
- assembly - Assembly x86 - Addressing variables in memory (answer is provided, looking for an explanation)
- python - Adding deep learning model at django
- http - 为什么逻辑非字符 (¬) 出现在 HTTP GET 查询字符串中
- android - MaterialDatePicker returning wrong value