Scapy:交互式数据包处理程序

简介

Scapy是一个强大的,用Python编写的交互式数据包处理程序

        可以让用户发送、嗅探、分析和伪造网络包,从而用来侦测、扫描和向网络发动攻击

        可以轻松地处理扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)之类的经典任务

        可以代替hping、arpspoofarp-skarpingp0f 甚至是部分 Nmaptcpdumptshark 的功能

使用

官方文档:Welcome to Scapy’s documentation! — Scapy 2.4.5. documentation

进入scapy:命令行输入scapy

 ls():查看scapy支持的网络协议

        ARP、DHCP、DNS、ICMP、IP、NTP、RIP、SNMP、 STP、PPPoE、TCP、TFTP、UDP等

lsc():查看scapy的指令集(函数)

        arpcachepoison、arping、sniff、send、sendp、sr、srp

数据包构造示例

在scapy中,每个协议就是一个类,我们通过实例化一个协议类来创建对应协议的数据包

        command():显示构造相同类型数据包的命令

        summary():显示数据包的概要信息

        show():显示数据包的详细信息

        show2():显示数据包的详细信息及数据包的校验和

        hexdump(pkt):以十六进制数据表示数据包的信息

        str():将数据包转换为十六进制字符串

        wrpcap(filename,pkt):将数据包写入文件

        rdpcap(filename):读取数据包文件

多层数据包:操作符"/"

        对多层数据包,Scapy采用操作符"/"来分层构造,且按照协议自底向上的顺序从左到右排列

        通常最下面的协议为Ether,然后是IP或ICMP,再之后是TCP或UDP

Ether数据包

        我们可以在Ether()中设置发送方和接收的MAC地址

IP数据包 

      数据包的目的IP(dst)既可以是一个IP地址,也可以是一个网段,此时会产生多个数据包

TCP数据包

        TCP数据包的端口号不仅可以手动指定,还可以通过RandShort()、RandNum()、fuzz()等函数随机生成

        RandShort():会在1-65535的范围内随机生成一个TCP端口号

        RandNum(a,b):在范围a-b内随机生成一个TCP端口号 

        fuzz():检测是否漏写,如果漏写就随机生成一个TCP端口号

数据包的发送

send(pkt):在第三层发送IP数据包,但不会收到返回结果

        sr(pkt):发送IP数据包,并接收两个结果(收到响应的数据包和未收到响应的数据包)

        sr1(pkt):发送IP数据包,并接收一个结果(收到响应的数据包)

sendp(pkt):在第二层发送Ether数据包,但不会收到返回结果

        srp(pkt):发送Ether数据包,并接收两个结果(收到响应的数据包和未收到响应的数据包)

        srp1(pkt):发送Ether数据包,并接收一个结果(收到响应的数据包)

抓包函数sniff

sniff(filter=””, iface=”any”, prn=function, count=N)

        filter:对数据包进行过滤

        iface:指定使用的网卡(默认为第一块)

        prn:对捕获到的数据包进行处理的函数(可使用lambda表达式)

        count:指定监听到数据包的数量,达到指定数量会停止监听

伯克利包过滤机制BPF

        使用该机制构造的字符串可以确定保留哪些数据包以及忽略哪些数据包

        空字符串表示保留所有数据包

        每个字符串由一个或多个原语组成,每个原语又由一个标识符(名称或数字)组成,后面跟着一个或多个限定符

        标识符:指进行测试的实际内容,如:192.168.1.1、8080等

        限定符类型

                Type:表示指代的对象,IP地址host、子网net、端口port等(默认为host)

                Dir:表示数据包传输的方向,源地址src、目的地址dst(默认为src or dst)

                Proto:表示与数据包匹配的协议类型,Ether、IP、TCP、ARP等

        我们可以使用and、or和not把多个原语组成一个更复杂的过滤语句

dst host 192.168.1.1 and port 8080

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值