• 【转】scapy 构造以太网注入帧


    1. 描述

      使用scapy进行以太网帧的注入,相对于RAW_SOCKET还是比较简单的。在讲述packet注入之前,先了解一下scapy伪造以太网帧的相关知识。下图为以太网帧格式和scapy对应的封装包格式。
      scy_ent


    2. 示例

    2.1 使用scapy构造IP数据包

      进入scapy环境,输入以下代码:
      

    >>>
    >>> pkt = IP()/ICMP()/”hello”
    >>>
    >>>
    >>> pkt.show()
    ###[ IP ]###
    version= 4
    ihl= None
    tos= 0x0
    len= None
    id= 1
    flags=
    frag= 0
    ttl= 64
    proto= icmp
    chksum= None
    src= 127.0.0.1
    dst= 127.0.0.1
    options
    ###[ ICMP ]###
    type= echo-request
    code= 0
    chksum= None
    id= 0x0
    seq= 0x0
    ###[ Raw ]###
    load= ‘hello’
      
      

     上面代码的意思是,构造一个pkt的包,在IP层中封装了ICMP包,负载的数据位“hello”。通过pkt.show()函数显示包的详细信息。

    2.2 发送packet

    • sendp——在第二层次上发送数据包。需要给定正确的网卡接口。
    • send——在第三层次上发送数据包。根据本地的路由表来进行路由发送。
      • 循环发送相同的包。
      • 间隔几秒发送一次包。

    2.2.1 第三层次上发送包(layer 3)

      首先,我们在第三层次上发送packet来做测试。在这之前先另起一个终端,输入以下命令,对流量做一下监听。
      tcpdump -i eth0 -XX -vvv icmp
      然后运行send(pkt)命令发送数据包,观察结果:
    send

      监听结果:
      moni_re
      从结果上看,我们发送了一个ICMP请求包,收到了百度的一个ICMP答复包,还可以看到我们发送的数据。

    ####2.2.2 第三层次发送包(layer 3)
      使用重构数据包,然后用sendp()函数发送。
      sendp(Ether()/IP(dst= "www.baidu.com")/ICMP()/"XXX",iface="eth0")
      Ether()构造以太网帧,和第三层次不同的是,在第二层次上发送要指定网卡接口, 这里我使用eth0。执行代码,成功发送一个数据包。如果想要循环发送,可以使用loop选项。
      sendp(Ether()/IP(dst= "www.baidu.com")/ICMP()/"XXX",iface="eth0",loop=1)
      代码执行后,会快速的循环发送这个数据包,使用ctrl+C结束。
      sendp
      如果想在两次发送数据包之间有一定的时间间隔,使用inter选项。
      sendp(Ether()/IP(dst= "www.baidu.com")/ICMP()/"XXX",iface="eth0",loop=1,inter=1)
      表示每隔1秒发送一个数据包。

    2.3 在层次2和层次3上发送和接收包

    • 层次3
      • ——sr()。返回答复和没有答复的包。
      • ——sr1()。返回仅仅答复或者发送的包。
    • 层次2
      • ——srp()
      • ——srp1()

    执行sr(IP(dst="www.baidu.com")/ICMP()/"XXX"),观察执行结果:
    sr

      成功发送了一个数据包,接收到了2个数据包,其中一个为答复包。这是我要集中注意的地方。将收到的数据赋值给自定义的变量,并查看。
      res
      
      使用sr1()函数,效果:
      sr1

  • 相关阅读:
    树莓派4B(4G版本)安装Ubuntu 19.10
    PyQt5通过使用QSS语法制作精美界面
    PyQt5 界面设计和业务处理分离
    Python多线程同步
    PyQt界面
    pip设置
    Vim 常用配置
    python日期处理
    vue项目创建与使用
    vue 指令,成员,组件
  • 原文地址:https://www.cnblogs.com/reddusty/p/4946118.html
Copyright © 2020-2023  润新知