11-1 Scapy基础
介绍
Scapy:用于构造网络各层协议报文,如以太网报文、icmp报文、IP报文,偏底层,非常灵活。Scapy不像requests库那种偏应用层的包,而是比较偏低层、精确、灵活,例如构造TCP报文中的ACK握手报文。
Scapy官网
Scapy官方文档
先决条件与注意事项
Linux环境 :Windows对很多linux生态出身的生产力方面的库并不能很好的兼容。经过我的测试,即使安装依赖库、依赖程序、添加环境变量,仍出现调用问题。
因此将在Ubuntu24中的Pycharm中(python3.12虚拟环境)进行。专门用于渗透测试的Kali系统自带scapy。Root权限问题 :发包、监控网卡等操作需要root权限,linux中的Pycharm为普通用户权限,在Pycharm中直接点击▶️运行脚本将会报错,虽然可以在终端
sudo python3 xxx.py方式运行,但为了方便还是建议一开始就以root用户登录。Pycharm以root用户运行后,为了安全将会禁止一些文件的预览,影响不大可以找到文件所在位置用系统自带软件打开。Scapy版本问题:这个包历史早,python2时代就已经流行,网上一些教程的语法已经不正确。
Scapy安装问题:Scapy包本身比较小,但它各种功能要调用其它程序,例如npcap/winpcap、PyX、GraphViz、TexLive(Latex)、matplotlib等,这些程序有些是系统应用,要通过各自操作系统包管理器安装,并且加入环境变量,因此代码运行中可能报各种缺少依赖的错误。
回顾网络基础OSI模型:

实验1 初步尝试和基础
打开ubuntu虚拟机,以root用户登录桌面(不是普通用户登录、命令行中再sudo),这样启动的Pycharm也具备root权限,运行后面代码时不会报权限错误。
(这里不建议用sudo命令因为初学者分不清python虚拟机环境、权限、脚本路径问题)。确认虚拟机网络连接正常。
安装scapy
构造报文

实验2 发送ICMP报文
即ping命令

实验3 sniff嗅探
sniff函数可以像Wireshark一样抓包。
实验设计:需要开启两个终端,一个负责嗅探,一个负责发包。
前置条件:
1)确定处于root权限。发包和控制网卡需要root权限。
2)开启两个终端,终端1进入交互式解释器(Pycharm自带的Python Interactive Console是普通权限,不能使用),终端2ping命令发icmp报文。
终端1进入Python交互式解释器
终端1开始嗅探
进入阻塞状态后,进行下一步
终端2发icmp包
ping任意网址
终端1嗅探到icmp包。
阻塞状态结束,说明已经抓到包。回到">>>"开头的交互式解释器状态,打印变量a查看嗅探到的icmp包信息。

进行上述几个实验时,可以打开Wireshark观察。