自主实现POP3流量抓取
根据测试需求,需要抓取POP3流量包,使用wireshark + Python(poplib库)实现
实现代码
不废话直接上; 注意别用SSL,这个是加密无法被抓包;port:110是公开;这里需要自行百度,官方未提供,参考一下信息
163.com:
接收邮件服务器: http://pop.163.com
接收端口: 110或995(使用ssl时)接收邮件服务器: http://imap.163.com
接收端口: 143或993(使用ssl时)
发送邮件服务器: http://smtp.163.com
发送端口: 25或465/994(使用ssl时)
126邮箱:
接收邮件服务器: http://pop.126.com
接收端口: 110
发送邮件服务器: http://smtp.126.com
发送端口: 25
139邮箱:
POP3服务器地址:http://POP.139.com(端口:110)
SMTP服务器地址:http://SMTP.139.com(端口:25)
QQ邮箱:
接收邮件服务器: http://pop.qq.com
接收端口: 110或995(使用ssl时)
接收邮件服务器: http://imap.qq.com
接收端口: 143或993(使用ssl时)
发送邮件服务器: http://smtp.qq.com
发送端口: 25或465/587(使用ssl时)
QQ企业邮箱 :
POP3服务器地址:http://pop.exmail.qq.com (SSL启用 端口:995)
SMTP服务器地址:http://smtp.exmail.qq.com【端口:25或465/587(>使用ssl时)】
gmail(http://google.com) :
POP3服务器地址:http://pop.gmail.com(SSL启用 端口:995)
SMTP服务器地址:http://smtp.gmail.com(SSL启用 端口:587)
Foxmail:
POP3服务器地址:http://POP.foxmail.com(端口:110)
SMTP服务器地址:http://SMTP.foxmail.com(端口:25)
sina.com:
接收邮件服务器: http://pop.sina.com
接收端口: 110
发送邮件服务器: http://smtp.sina.com
发送端口: 25
sinaVIP:
POP3服务器:http://pop3.vip.sina.com (端口:110)
SMTP服务器:http://smtp.vip.sina.com (端口:25)
sohu.com:
POP3服务器地址:http://pop3.sohu.com(端口:110)
SMTP服务器地址:http://smtp.sohu.com(端口:25)
雅虎邮箱:
接收邮件服务器: http://pop.mail.yahoo.cn
接收端口: 110或995(使用ssl时)
接收邮件服务器: http://imap.mail.yahoo.cn
接收端口: 143或993(使用ssl时)
发送邮件服务器: http://smtp.mail.yahoo.cn
发送端口: 25或465(使用ssl时)>
import poplib
from email.parser import Parser
from email.header import decode_header
# 邮箱设置
email = "你的邮箱"
password = "xxx你的授权码"
pop3_server = "pop.qq.com" # 你的POP3服务器地址,如pop.qq.com
# 连接到POP3服务器
server = poplib.POP3(pop3_server) if pop3_server.startswith("https") else poplib.POP3(pop3_server) #这里需要注意有个SSL别用否则就抓不到了哦
server.user(email)
server.pass_(password)
# 获取邮件数量和大小
num_messages = len(server.list()[1])
print(f"邮箱中共有{num_messages}封邮件。")
# 下载最新一封邮件
if num_messages > 0:
# 获取最新邮件的索引(POP3中邮件索引从1开始)
latest_email_index = num_messages
resp, lines, octets = server.retr(latest_email_index)
# 解码邮件内容
msg_content = b'\n'.join(lines).decode('utf-8')
msg = Parser().parsestr(msg_content)
# 打印邮件信息
print("邮件主题:", decode_header(msg['Subject'])[0][0])
print("发件人:", decode_header(msg['From'])[0][0])
print("收件人:", decode_header(msg['To'])[0][0])
# print("日期:", decode_header(msg['Date'])[0][0])
# 打印邮件正文
for part in msg.walk():
if part.get_content_type() == "text/plain":
print("\n邮件正文:")
print(part.get_payload(decode=True).decode('utf-8'))
break
# 关闭连接
server.quit()
else:
print("邮箱中没有邮件。")
wireshark 进行抓包
设置抓包过滤
已知代码中 port= 110, 所以 过滤我们可以直接用tcp port == 110 实现