一、准备环境:
Ubuntu + python2.7
sudo apt-get install python-scapy
 
二、准备报文:
先抓取一些报文,本实验使用的是DHCP的报文。
文件-导出特定分组-选择保存为*.pcap文件,把pcap文件拷贝到Ubuntu电脑上。
 
三、启动scapy 并发送dhcp.pcap抓包的第二个报文DHCP Discover
sudo scapy
>>>a = rdpcap('dhcp.pcap')
>>>sendp(a[1])
用wireshark抓包:
 
四、查看报文信息:
>>>s = a[1]
>>>s.show()
###[ Ethernet ]###
  dst= ff:ff:ff:ff:ff:ff
  src= 00:e0:4c:68:00:33
  type= 0x800
###[ IP ]###
     version= 4L
     ihl= 5L
     tos= 0x0
     len= 328
     id= 15294
     flags=
     frag= 0L
     ttl= 64
     proto= udp
     chksum= 0x3de8
     src= 0.0.0.0
     dst= 255.255.255.255
>>> s[DHCP]
<DHCP  options=[message-type=discover client_id='\x01\x00\xe0Lh\x003' requested_addr=192.168.31.128 hostname='waston-DELL990' vendor_class_id='MSFT 5.0' param_req_list='\x01\x0f\x03\x06,./\x1f!y\xf9+' end pad] |> 
可以通过 s[DCHP] 访问到 DHCP 层(s[Ether]代表二层、s[IP]代表IP层、
s[UDP]代表UDP层等等)。
 
五、修改报文:

>>> s=a[1]

>>> s[DHCP].options
[('message-type', 1), ('client_id', '\x01\x00\xe0Lh\x003'), ('requested_addr', '192.168.31.128'), ('hostname', 'waston-DELL990'), ('vendor_class_id', 'MSFT 5.0'), ('param_req_list', '\x01\x0f\x03\x06,./\x1f!y\xf9+'), 'end', 'pad']
>>> s[DHCP].options.remove(('hostname', 'waston-DELL990'))
>>> s[DHCP].options
[('message-type', 1), ('client_id', '\x01\x00\xe0Lh\x003'), ('requested_addr', '192.168.31.128'), ('vendor_class_id', 'MSFT 5.0'), ('param_req_list', '\x01\x0f\x03\x06,./\x1f!y\xf9+'), 'end', 'pad']
修改报文后需要重新计算报文长度及校验和
>>> s[IP].len=None
>>> s[IP].checksum=None
>>> s[UDP].checksum=None
>>> s[UDP].len=None
>>> sendp(s)
>>> help(s[DHCP].options.insert)
Help on built-in function insert: 
insert(...)
    L.insert(index, object) -- insert object before index 
>>> s[DHCP].options.insert(3,('hostname', 'waston-DELL9902'))
>>> s[DHCP].options
[('message-type', 1), ('client_id', '\x01\x00\xe0Lh\x003'), ('requested_addr', '192.168.31.128'), ('hostname', 'waston-DELL9902'), ('vendor_class_id', 'MSFT 5.0'), ('param_req_list', '\x01\x0f\x03\x06,./\x1f!y\xf9+'), 'end', 'pad']
>>> sendp(s)
 
六、构造报文:
>>> s
<Ether  dst=ff:ff:ff:ff:ff:ff src=00:e0:4c:68:00:33 type=0x800 |<IP  version=4L ihl=5L tos=0x0 len=None id=15294 flags= frag=0L ttl=64 proto=udp chksum=0x3de8 src=0.0.0.0 dst=255.255.255.255 options=[] |<UDP  sport=bootpc dport=bootps len=None chksum=0x2bb4 |<BOOTP  op=BOOTREQUEST htype=1 hlen=6 hops=0 xid=3564906511L secs=0 flags= ciaddr=0.0.0.0 yiaddr=0.0.0.0 siaddr=0.0.0.0 giaddr=0.0.0.0 chaddr='\x00\xe0Lh\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' sname='\x00\x00\x00\x00\x00\x00\x00' file='\x00\x00\x00\x00\x00' options='c\x82Sc' |<DHCP  options=[message-type=discover client_id='\x01\x00\xe0Lh\x003' requested_addr=192.168.31.128 hostname='waston-DELL9902' vendor_class_id='MSFT 5.0' param_req_list='\x01\x0f\x03\x06,./\x1f!y\xf9+' end pad] |>>>>>
>>> 
pkt = Ether()/IP()/UDP()/BOOTP()/DHCP(options=[('message-type','discover')])/DHCP(options=['end'])
sendp(pkt)
pkt[Ether].src='00:e0:4c:68:00:36'
pkt[Ether].dst='ff:ff:ff:ff:ff:ff'
pkt[IP].src='0.0.0.0'
pkt[IP].dst='255.255.255.255'
sendp(pkt)
>>> pkt
<Ether  dst=ff:ff:ff:ff:ff:ff src=00:e0:4c:68:00:36 type=0x800 |<IP  frag=0 proto=udp src=0.0.0.0 dst=255.255.255.255 |<UDP  sport=bootps dport=bootpc |<BOOTP  options='c\x82Sc' |<DHCP  options=[message-type='discover'] |<DHCP  options=[end] |>>>>>>
 
其它: 
ipython中使用scapy
ipython
[1]:from scapy.all import *
[2]:a=rdpcap('dhcp.pacp')
[3]:s=a[1]
[4]:sendp(s)

使用Scapy回放报文pcap的更多相关文章

  1. 【scapy】读取pcap

    scapy读取pcap包 假设有pcap包test.pcap,读取其中的分层流量信息 代码: import scapy_http.http try: import scapy.all as scapy ...

  2. Python—网络抓包与解包(pcap、dpkt)

    pcap安装 [root@localhost ~]# pip install pypcap 抓包与解包 # -*- coding:utf-8 -*- import pcap, dpkt import ...

  3. tcpreplay工具安装使用

    一.Tcpreplay功能简介 首先推荐一个网站:http://tcpreplay.synfin.net/ ,上面有Tcpreplay的安装包和很多文档,包括手册.man页和FAQ等. Tcprepl ...

  4. 基于CentOS6.5下如何正确安装和使用Tcpreplay来重放数据(图文详解)

    前期博客 基于CentOS6.5下snort+barnyard2+base的入侵检测系统的搭建(图文详解)(博主推荐) tcpreplay是什么? 简单的说, tcpreplay是一种pcap包的重放 ...

  5. Homework_2

    禁 止 吃 瓜 我是小鱼 刚才有个同学问我小鱼发生肾么事了 我说怎么回事? 给我发了一个张截图,我一看! 噢!原来是昨天发布第二次寒假作业了 我大一了啊没有闪 来!偷袭!我三岁的小同志 当时就流眼泪了 ...

  6. Windows下使用scapy+python2.7实现对pcap文件的读写操作

    scapy在linux环境中对pcap文件进行操作非常方便,但在windows下,特别是在python2.7环境下却会碰到各种各样的依赖包无法使用的问题,最明显的可能就属dnet和pcap的pytho ...

  7. 使用它tshark分析pcap的例子以及scapy下载地址

    转一篇cisco工作人员使用tshark分析pcap的文章,以及scapy的下载地址 http://blogs.cisco.com/security/finding-a-needle-in-a-pca ...

  8. scapy IPv6 NS NA报文构造

    NS 报文构造: #! /bin/python from scapy.all import * a=IPv6(src='2a01:4f8:161:5300::40', dst='ff02::1:ff0 ...

  9. pcap报文格式

    pcap报文格式 pcap报文整体格式 pcap 报文头格式 pcap报文格式,黄色部分为报文头 pcapng报文格式 PCAPNG: PCAP Next Generation Dump File F ...

随机推荐

  1. Codeforces 875C National Property(拓扑排序)

    题目链接  National Property 给定n个单词,字符集为m 现在我们可以把其中某些字母变成大写的.大写字母字典序大于小写字母. 问是否存在一种方案使得给定的n个单词字典序不下降. 首先判 ...

  2. 着陆攻击LAND Attack

    着陆攻击LAND Attack   着陆攻击LAND Attack也是一种拒绝服务攻击DOS.LAND是Local Area Network Denial的缩写,意思是局域网拒绝服务攻击,翻译为着陆攻 ...

  3. Linux下Shell的快捷键(转)

    下述所有命令在Linux/Unix的shell下有效,这里以bash为主.如有出入,以你自己的服务器为准.本文所指的Linux主要指RHEL/CentOS,Unix指的是FreeBSD,这也是Unix ...

  4. 【jQuery】input textarea 文本变化的动态监听

    实时监听Input textarea文本变化的监听事件:[但不包含通过js动态添加改变的文本事件] HTML: <textarea style="display: none" ...

  5. asp.net Excel导入&导出

    1.Excel数据导入到数据库中: //该方法实现从Excel中导出数据到DataSet中,其中filepath为Excel文件的绝对路径,sheetname为表示那个Excel表:        p ...

  6. Hadoop 2.2.0集群搭建

    一.环境说明 1.虚拟机平台:VMware10 2.Linux版本号:ubuntu-12.04.3-desktop-i386 3.JDK:jdk1.7.0_51 4.Hadoop版本号:2.2.0 5 ...

  7. sh_Spring整合Hibernate

    分别介绍了Sping和Hibernate,以下是将它们整合到一块去了.   一.Hibernate内容 1.创建PO类. package cn.tgb.domain; //User实体 public ...

  8. C++11 并发指南四(<future> 详解一 std::promise 介绍)(转)

    前面两讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread 和 std::m ...

  9. 怎样把多个Android Project打包成一个APK

    怎样把多个Android Project打包成一个APK(你的项目怎样引用其它项目). 怎样把多个android project 打包成一个apk呢,事实上原理是这种.一个主project引用其它的p ...

  10. String,StringBuilder性能对照

    import java.util.Date; import java.util.UUID; /**  * 測试String,StringBuilder性能,推断什么时候改用String,什么时候该用S ...