zoukankan      html  css  js  c++  java
  • scapy构造数据包

    一、进入scapy交互界面

    在终端下输入:scapy ,进入交互界面:

    二、查看scapy已经实现的网络协议

    ls()         列出scapy中已实现的网络协议
    ls(协议类型)     查看某个协议头部字段格式
    lsc()        列出scapy中可以使用的命令或函数,比如嗅探时,我们经常会用到sniff()函数
    IP().show()    显示包的IP信息
    IP().display() 显示包的模板

    dpkg = sniff(filter="tcp",count=4) dpkg[2].show()   显示包抓取到的tkpk的第3个数据包的的详细内容
    dpkg[2].summary()    查看捕获到数据包的信息摘要

    wrpcap("dpkgsniff.pcap",dpkg)     将嗅探到的packet内容写到pcap文件
    dpkg_read = rdpcap("dpkgsniff.pcap")  读取pcap文件

    三、构造数据包

    #构造一个ip数据包
    dpkg = IP()
    #修改数据包的值
    dpkg.ttl = 24

    #构造一个ICMP数据包
    dpkg = ICMP()
    #构造一个TCP数据包
    dpkg = TCP()

    通过“/”来表示网络中各个层的组合

    dpkg=Ether()/IP(dst="www.baidu.com")/TCP()/"GET /index.html HTTP/1.0 
    
    "
    dpkg.show()
    hexdump(dpkg)

    sprintf()输出某一层某个参数的取值,如果不存在就输出”??”,具体的format格式是:%[[fmt][r],][layer[:nb].]field%

    %[[fmt][r],][layer[:nb].]field%

    layer: 协议层的名字,如Ether、IP、Dot11、TCP等。

    filed: 需要显示的参数。

    nb: 当有两个协议层有相同的参数名时,nb用于到达你想要的协议层。

    r:  一个标志。当使用r标志时,意味着显示的是参数的原始值。

    例如,TCP标志中使用人类可阅读的字符串’SA’表示SYN和ACK标志,而其原始值是18.

    例子:pkt.sprintf("Etherent source: %Ether.src%   IP src: %IP.src%")   

    或者:pkt.sprintf('%Raw.load%')   #其中Raw为具体的协议层

     显示具体的网络层的信息:

    dpkg["IP"].show()  或者dpkg[IP].show()  也可以
    dpkg["TCP"].show() 
    dpkg[
    "Raw"].show()
    #或者等价于
    dpkg.getlayer(ip).show()
    dpkg.getlayer(TCP).show()
    dpkg.getlayer(Raw).show()

     

    获取某个协议的具体字段值:

    dpkg["Raw"].load
    dpkg.getlayer(TCP).window

  • 相关阅读:
    在C#中生成唯一的字符串和数字
    c:\Windows\System32\drivers\etc\hosts 这是什么
    ado.net 分布式事务处理示例,及微软官方示例
    常逛网站五星推荐
    结构化程序设计方法 windrainpy
    responsive响应式布局 windrainpy
    DOM Core和HTML DOM的区别 windrainpy
    自定义addLoadEvent函数为body.onload事件绑定多个函数 windrainpy
    壮大我的sublime Text 2 windrainpy
    server服务器知识和CS、BS架构 windrainpy
  • 原文地址:https://www.cnblogs.com/liyuanhong/p/10925832.html
Copyright © 2011-2022 走看看