公司上线了一个新系统,需要在服务端对每个用户进行mac绑定,写了一个小程序,只要用户运行后就可以收集到mac地址并发送到我的邮箱。
然后我现在分享下怎么将mac地址从邮箱里面提取出来的经过。
我这边邮件客户端是foxmail,里面在邮件列表可以右击,然后导出,导出的文件是eml格式。
然后在众多的邮件文件里面提取出邮件里面的mac地址。
代码如下:
import eml_parser
import re
import os
import pandas as pd
def extract_mac_address(text):
# pattern = '(([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})|([0-9a-fA-F]{2}[-]){5}([0-9a-fA-F]{2})|[0-9a-fA-F]{12})'
# mac地址正则,上面那个是没分隔符的正则。
pattern = '(([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})|([0-9a-fA-F]{2}[-]){5}([0-9a-fA-F]{2}))'
mac_addr_list = re.findall(pattern, text)
return list(map(lambda x: x[0], mac_addr_list))
def phone_number(text):
pattern = '(([0-9]{11}))' # 手机号码正则,必须11位数字
phone = re.findall(pattern, text)
return list(map(lambda x: x[0], phone))
path = os.getcwd() # 获取当前目录
fName = [] # 新建数组
for root, dirs, files in os.walk(path):
for name in files: # 在path里面查找文件
fName.append(os.path.join(root, name))
for name in dirs: # 在path子目录里面查找文件
fName.append(os.path.join(root, name))
macList = [] # 新建mac空数组
for f in fName: # 遍历文件列表数组
if f.split('.')[-1] == "eml":
with open(f, 'rb') as g:
a = g.read()
eml = eml_parser.eml_parser.decode_email_b(a, True, True)
# decode_email_b方法
# 第一个参数是eml文件二进制读出来的内容
# 第二个参数表示邮件解析返回的数据结构里是否包含邮件的原始内容,也就是html内容,我这里选True,这样内容可以直接放到网页中显示。
# 第三个参数表示解析返回的数据结构中是否包含附件内容。
pn = (phone_number(str(f)))
md = (extract_mac_address(str(eml)))
print(pn + md)
macList.append(pn+md)
data = pd.DataFrame(macList)
writer = pd.ExcelWriter('maclist.xlsx')
data.to_excel(writer, 'maclist', index=False, header=False)
writer.save()
writer.close()
网友评论