博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scapy流量嗅探简单使用
阅读量:6260 次
发布时间:2019-06-22

本文共 3212 字,大约阅读时间需要 10 分钟。

1. 简介

scapy是一个可用于网络嗅探的非常强大的第三方库。在网络流量嗅探方面,常用的一些第三方库:

 pylibpcap pycapy pypcap impacket scapy

scapy在这些库中功能最强大使用也最灵活。具有以下几个特点:

 交互模式,用作第三方库。 可以用来做packet嗅探和伪造packet。 已经在内部实现了大量的网络协议。(DNS,ARP,IP,TCP,UDP等等) 可以用它来编写非常灵活实用的工具。

 

  它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等等。

  它可以很容易地处理一些典型操作,比如端口扫描,tracerouting,探测,单元测试,攻击或网络发现(可替代hping,NMAP,arpspoof,ARP-SK,arping,tcpdump,tethereal,P0F等)
  它还有很多更优秀的特性——发送无效数据帧、注入修改的802.11数据帧、在WEP上解码加密通道(VOIP)、ARP缓存攻击(VLAN)等,这也是其他工具无法处理完成的。
  常用功能

 sniff 嗅探 dissect 解剖 forge 伪造 fingerprinting 指纹识别  

2. 使用scapy

2.1 scapy安装

  scapy是第三方库,系统上默认是没有安装的。

  在Ubuntu下,我们可以直接使用以下命令进行安装: sudo apt-get install scapy 

  安装完成以后,只需要在终端下执行sudo scapy就可以进入scapy的命令行模式

我们可以输入:help()进入帮助模式,quit 命令退出。

 

在帮助模式下,我们可以查看类的一些方法,如:

 

2.2 下面介绍一些在全局模式中常用的方法

ls()         列出scapy中已实现的网络协议ls(协议类型)     查看某个协议头部字段格式lsc()        列出scapy中可以使用的命令或函数 IP().show()    显示包的IP信息test[i].show()   显示包test的详细内容 a.summary()    查看捕获到数据包的信息摘要 

(1)查看实现的协议: 

(2)查看某个协议头部字段格式

 (3)列出scapy中可以使用的命令或函数。比如嗅探时,我们经常会用到sniff()函数

 

2.3 scapy嗅探示例

在scapy命令模式下,异常输入以下代码进行试验。
1)、嗅探流量包

2)查看下我们截取的报文摘要

 3)wlan0[i].show()    详细查看packet中各协议字段的具体值

4)保存和读取数据包

wrpcap("wlan0sniff.pcap",wlan0)     将嗅探到的packet内容写到pcap文件

(这里的'wlan0'不是网卡名,为了避免误解,我复制wlan0的包为wlan0test)

wlan0read = rdpcap("wlan0snif2f.pcap")  读取pcap文件

 

还有一些其他常用函数,不再一一举例。

wlan0[i].show()    详细查看packet中各协议字段的具体值wrpcap("testsniff.pcap",test)     将嗅探到的packet内容写到pcap文件read_pkts = rdpcap("testsniff.pcap")  和读取pcap文件为sniffer函数添加过滤条件pkts = sniff(iface = "eth0",filter = "udp",count = 3 ) 设置嗅探包的数量为30,然后过滤ICMP协议类型的包。等待显示结果。另起一个终端,然后ping一个网址,观察嗅探的结果。 pkts = sniff(iface = "eth0",filter = "icmp",count = 30, prn = lambda x: x.summary())
帧与字符串的互相转换 icmp_str = str(pkts[0]) icmp_str recombine = Ether(icmp_str) recombine 导入导出base64编码格式的数据 export_object(str(pkts[0])) newPkt = import_object() #将上一步导出的字符串填入,回车,"ctrl_+d"结束。 newPkt Ether(newPkt)

 

“/”符号表示两个链路层的组合,可以参考:http://www.cnblogs.com/ssooking/p/6114949.html

a=Ether()/IP(dst="www.baidu.com")/TCP()/"GET /index.html HTTP/1.0 \n\n"hexdump(a)

 

主要功能函数sniff

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

filter

  允许我们对Scapy嗅探的数据包指定一个BPF(Wireshark类型)的过滤器,如:udp,icmp也可以留空以嗅探所有的数据包。

  例如:嗅探所有的HTTP数据包,tcp port 80 的BPF过滤

iface

  设置嗅探器所要嗅探的网卡,留空则对所有网卡进行嗅探。例如:wlan0

prn

  指定嗅探到符合过滤器条件的数据包时所调用的回调函数,这个回调函数以接受到的数据包对象作为唯一的参数。

  例如:

  def pack_callback(packet):

  print packet.show()
  sniff(prn=pack_callback,iface="wlan0",count=1)

 如:一个嗅探ftp登录密码的函数例子

def ftpsniff(pkt):	dest = pkt.getlayer(IP).dst	raw = pkt.sprintf('%Raw.load%')	user = re.findall('(?i)USER (.*)', raw)	pswd = re.findall('(?i)PASS (.*)', raw)	if user:		print '[*] Detected FTP Login to ' + str(dest)		print '[+] Username: ' + str(user[0])	elif pswd:		print '[+] Password: ' + str(pswd[0])

完整代码请参考另一篇博客: http://www.cnblogs.com/ssooking/p/6095714.html

 

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%")

 

官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html

参考链接:http://blog.csdn.net/Jeanphorn/article/details/45700551

你可能感兴趣的文章
redis 中文字符显示
查看>>
顺序图【6】--☆☆
查看>>
Docker Swarm 让你事半功倍
查看>>
javaScript事件(四)event的公共成员(属性和方法)
查看>>
Oracle SID爆破工具SidGuess
查看>>
批处理常用命令总结2
查看>>
Android -- 自定义View小Demo,绘制钟表时间(一)
查看>>
信息检索Reading List
查看>>
自动精简配置&重复数据删除核心技术点及其经济效应探究
查看>>
cncert网络安全周报35期 境内被植入后门的政府网站112个 环比上涨24.4%
查看>>
物联网到底是不是泡沫,且看英特尔交出的答案
查看>>
IPv6太落后了:中国加速服务器援建
查看>>
物理引擎中velocity的单位是个什么鬼?
查看>>
oracle的drop命令
查看>>
设计与梳理企业二级流程的路线方法
查看>>
垃圾回收概念与算法
查看>>
TFS实现需求工作项自动级联保存
查看>>
springmvc 4.x 处理json 数据时中文乱码
查看>>
Python练习(day7)
查看>>
网络工程师笔试题总结
查看>>