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