一、准备环境:
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. Unsafe in Java

    http://www.cnblogs.com/xrq730/p/4976007.html http://www.importnew.com/14511.html http://blog.csdn.ne ...

  2. SPOJ LIS2 - Another Longest Increasing Subsequence Problem(CDQ分治优化DP)

    题目链接  LIS2 经典的三维偏序问题. 考虑$cdq$分治. 不过这题的顺序应该是 $cdq(l, mid)$ $solve(l, r)$ $cdq(mid+1, r)$ 因为有个$DP$. #i ...

  3. 同源策略Same-origin policy

     同源策略Same-origin policy 同源策略Same-origin policy是Web应用的一种安全基础策略.它规定同一源中,页面包含的脚本可以访问该源下的其他页面的数据.只有当网址中的 ...

  4. The 2016 ACM-ICPC Asia China-Final Contest Promblem D

    显然答案具有单调性,可以二分.问题是 我们二分出一个 堆数,该怎么判定能否达到这个堆数呢? 我们可以很简单的用调整法证明,最底下的一层的冰淇淋肯定是最小的那些,往上叠加的话我们再贪心的让较少的放在较小 ...

  5. Revolving Digits

    题面 [题目描述]: 有一天,Silence对可以旋转的正整数十分感兴趣.在旋转操作中,他可以把后面的数字按照原位置不动地搬到剩下位置的前面.当然,他也可以完全不动这串数字.比如,他可以把123变为1 ...

  6. 小程序使用wxParse插件解析html标签图片间距问题

    转自:https://www.cnblogs.com/likun123/p/9543376.html 小程序解析html标签,就需要用到wxParse啦.但是在解析连续图片的时候,会发现图片之间会有间 ...

  7. 一个jdbc connection连接对应一个事务

    Spring保证在methodB方法中所有的调用都获得到一个相同的连接.在调用methodB时,没有一个存在的事务,所以获得一个新的连接,开启了一个新的事务. Spring保证在methodB方法中所 ...

  8. Class definition

    Prerequisite Articles (None) Related Articles Category Accessor method A class definition is the spe ...

  9. Go -- LRU算法(缓存淘汰算法)(转)

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. ...

  10. Python基础语法01

    Python 标识符 在python里,标识符有字母.数字.下划线组成. 在python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. python中的标识符是区分大小写的. 以 ...