Python 通过域名将网络流量与授权列表进行比较
我试图解析网络流量,并将流量中的域名与最常见的网站列表进行比较。其目的是打印不在常见网站列表中的所有网站名称Python 通过域名将网络流量与授权列表进行比较,python,regex,Python,Regex,我试图解析网络流量,并将流量中的域名与最常见的网站列表进行比较。其目的是打印不在常见网站列表中的所有网站名称 with open('/Users/downloads/scripting_for_security/resources/top_100.txt') as f: safeAdd = f.readlines(), with open('/Users/downloads/scripting_for_security/resources/traffic_log.txt') as
with open('/Users/downloads/scripting_for_security/resources/top_100.txt') as f:
safeAdd = f.readlines(),
with open('/Users/downloads/scripting_for_security/resources/traffic_log.txt') as n:
netTraffic = n.readlines(),
domainTraffic = re.findall(r'\s(?:www.)?(\w+.com)', netTraffic)
for i in safeAdd:
for e in domainTraffic:
if i != e:
print(e)
获取类型错误
TypeError回溯(最近的调用
最后)在
8 netTraffic=n.读线(),
9
--->10 domainTraffic=re.findall(r'\s(?:www.)?(\w+.com)”,netTraffic)
11
十二,
findall中的~/anaconda3/lib/python3.7/re.py(模式、字符串、标志)
221
结果中包含222个空匹配项。”“”
-->223返回编译(模式、标志).findall(字符串)
224
225 def finditer(模式、字符串、标志=0):
TypeError:应为字符串或类似字节的对象
netTraffic是根据
findall需要字符串类型的第二个参数。netTraffic是一个列表,如下所示 findall需要第二个string类型的参数,正如前面提到的,它需要一个字符串,而您正在传递一个列表。解决这个问题的方法之一是迭代字符串列表(
netTraffic
),并构建一个找到的所有匹配项的列表(domainTraffic
)。我在下面展示了这一点:
将open('/Users/downloads/scripting_for_security/resources/top_100.txt')作为f:
safeAdd=f.readlines(),
将open('/Users/downloads/scripting_for_security/resources/traffic_log.txt')作为n:
netTraffic=n.readlines(),
#初始化空列表
域名交通=[]
#迭代每个值并将匹配项添加到列表中
对于净流量:
domainTraffic.extend(re.findall(r'\s(?:www.)?(\w+.com)),str(net))
#使用列表理解筛选出安全添加项
filtered_list=[如果添加不在safeAdd中,则添加到域中的外接程序交通]
打印(已筛选列表)
您也可以将列表转换为一个长字符串,然后对组合的字符串运行re.findall
。这实际上取决于您的字符串是什么。如前所述,需要一个字符串,而您正在传递一个列表。解决此问题的方法之一可能是迭代字符串列表(netTraffic
)并建立一个找到的所有匹配项的列表(domainTraffic
)。我在下面展示了这一点:
将open('/Users/downloads/scripting_for_security/resources/top_100.txt')作为f:
safeAdd=f.readlines(),
将open('/Users/downloads/scripting_for_security/resources/traffic_log.txt')作为n:
netTraffic=n.readlines(),
#初始化空列表
域名交通=[]
#迭代每个值并将匹配项添加到列表中
对于净流量:
domainTraffic.extend(re.findall(r'\s(?:www.)?(\w+.com)),str(net))
#使用列表理解筛选出安全添加项
filtered_list=[如果添加不在safeAdd中,则添加到域中的外接程序交通]
打印(已筛选列表)
您也可以将列表转换为一个长字符串,然后在组合字符串上运行
re.findall
。这实际上取决于您的字符串是什么。这里的问题是,您正在向re.findall
传递一个行的列表
,而不是文本,
使用read()
代替readlines()
:
以open('data.txt')作为f的:
打印(键入(f.readlines())#列表
print(type(f.read())#str被re.findall或任何其他函数接受
在代码中更改以下内容:
safeAdd = f.read()
netTraffic = n.read()
并删除,
,netTraffic
将是一个元组
包含一个列表
行
,请检查以下内容:
x = 1, # equavalent to x = (1,) result is tuple
x = 1 # is equavalent to x = (1) without "," it's integer
这里的问题是您正在将
行的列表
而不是文本传递给re.findall
,
使用read()
代替readlines()
:
以open('data.txt')作为f的:
打印(键入(f.readlines())#列表
print(type(f.read())#str被re.findall或任何其他函数接受
在代码中更改以下内容:
safeAdd = f.read()
netTraffic = n.read()
并删除,
,netTraffic
将是一个元组
包含一个列表
行
,请检查以下内容:
x = 1, # equavalent to x = (1,) result is tuple
x = 1 # is equavalent to x = (1) without "," it's integer