scapy的使用


一切网络流量操作请配合流量抓包工具协同使用,强化流量意识

scapy解决三个问题:

  • 监听流量(wireshark)
  • 分析流量
  • 编辑流量数据包(链路层,网络层,传输层),应用层也可以编辑,但是意义不大。

scapy的使用

一、命令行交互模式

以管理员身份打开cmd,然后在cmd中输入scapy打开

image-20240428194224461

1、sniff流量嗅探

>>>show_interfaces()  # 查看本机所有网卡

>>>sniff(count=10)  # 基于所有网卡监听10个数据包

>>>sniff(count=10,iface="网卡名")  # 在指定网卡上监听10个数据包

>>>pkg=sniff(count=10,iface="网卡名")  # 将指定网卡上监听到的10个数据包赋值给某个变量

>>>pkg=sniff(count=10,iface="网卡名",filter="icmp")  # 监听指定网卡指定协议类型的数据包

>>>pkg.summary()  # 查看每个数据报的摘要信息

>>>pkg[0]  #展示监听到的数据包中的第一个

>>>pkg[0].show()  #列出监听到的数据包中的第一个

>>>pkg[0][Raw].load  #查看数据包中的具体数据信息

2、编辑数据包

#发送数据包
>>>send(IP(dst="192.168.110.37")/ICMP())  # 发送一个数据包,IP层中目标IP地址为192.168.110.37,ICMP()层表示我使用ICMP协议发送

>>>send(IP(dst="192.168.110.37")/ICMP()/"abcdefghijklmnopqrstuvwabcdefghi")  # 放松一个带有payload的icmp数据包(类似于标准的ping的格式)

>>>pkg=IP(dst="192.168.110.37")/ICMP()/"abcdefghijklmnopqrstuvwabcdefghi"
>>>send(pkg,count=5,inter=1)
# 间隔为1,发送5个icmp数据包


# 发送数据包并接收响应
>>>pkg=sr1(IP(dst="192.168.110.37")/ICMP()/"abcdefghijklmnopqrstuvwabcdefghi")
>>>pkg  # 查看响应
>>>pkg[IP].id  # 获取对应字段的值,[] 中是标签的值, .后面跟的是该标签中所对应的字段的值




# ARP数据包发送
>>>send(ARP(psrc="192.168.110.37",pdst="192.168.230.135"))
或
>>>pkg=sr1(ARP(psrc="192.168.110.37",pdst="192.168.230.135"))
>>>pkg

>>>pkg=sr1(ARP(psrc="192.168.110.37",pdst="192.168.230.135"),timeout=3)  # 如果给一个不存在的IP地址发送数据包,我们可以通过设置超时时间来提高查询效率
#如果可以正确接收到数据包并且可以获得响应及其中的源MAC地址,那么就说明该IP地址是online的
>>>pkg[ARP].hwsrc  # 所需要主机的MAC地址
>>>pkg[ARP].psrc  # 所需主机的IP地址

3、读写流量文件

>>>wrpcap(D:/test.cap,pkg)
>>>pkr=rdcap("D:/test.cap")
>>>pkr

二、python代码调用

image-20240429165111378

image-20240429165052001

但是如果向一个在线的IP地址未开放的端口发送数据包,正常情况下,是 SYN -> RST ACK,会回复一个RST重连请求,但是如果有防火墙或其他中间件设备啥的,也有可能回复一个ICMP数据包,或者什么都不回复

image-20240429192515058

image-20240429192725528

image-20240429192807710

这种情况

但是无伤大雅,我们只需要知道正确的情况是,IP地址在线,并且端口也开放的情况,对方会回复给我们SYN+ACK的数据包,并且他的TCP层中的flags属性的值为 十六进制的0x012 十进制的18 字符为‘SA’

image-20240429193111134

根据此我们就可以对其进行判断,是否正确回复数据包

TCP三次握手

TCP三次握手

ack=接收到的数据包的seq+1

client seq=自身发的上一个数据包的seq+1

image-20240430135053975

我们看,这是正常的TCP三次握手并且客户端与服务端发送消息的数据报文

第一个包: ack=0 seq=1646758924(随机)

image-20240430135124545

第二个包:ack=1646758924+1 seq=306657516(随机)

image-20240430135231012

第三个包:ack=306657516+1 seq=1646758924+1

image-20240430135914815

历经波折,总算将三次握手并且发送数据的通信构造完成了

image-20240503155342937

但是网络通信这个东西,奇怪的地方太多了,因此这种能正常完成的情况也属于最正常,第一次通信成功率较高

TCP四次挥手

举个例子:

张三:好的,那我先走了
李四:好的,那你走吧
李四:那我也走了?
张三:好的,你走吧

TCP四次挥手

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值