简单了解
前置知识:需要学习TCP/IP网络协议模型
参考文章:http://t.csdn.cn/d6kY2 //因为还没系统的学网络,看的这篇文章学的。
Scapy是python的一个库,可以自己封装网络包,具有很强的自由度。作用可以:
1。扫描局域网内的客户机,将IP与MAC地址列出来 2。找DHCP服务器,列出IP与MAC地址
3。DNS解析
scapy安装
kali安装:sudo apt-get install python-scapy
windows安装:
初次使用scapy
进入交互页面后,简单使用一下。创建一个ip类,用ls()函数查看类的属性。
我们把pkt这个ip的目标地址改成127.0.0.2。源地址的属性名是 src,目标是dst.
这个ip数据包发往127.0.0.2这个地方。
Scapy用分层的方式构造数据包。从低到高是:Ether(用MAC地址),IP, TCP或者UDP。
例如用Ether发送一个广播数据包。
temp=Ether(dst="ff:ff:ff:ff:ff:ff") //记住这里是MAC地址
send(temp) //发送数据包,但是没有响应
具体就是用”/“分层:
pkt=Ether() / IP() / TCP() #现在pkt这个数据包能够用这三种协议传输。
构造Http数据包: pkt=IP()/TCP()/ "GET / HTTP /1.0 \r\n\r\n"
Scapy的常用函数
查看类的属性: ls(IP()) 查看可以使用的函数: lsc()
raw() 用字节格式查看数据包内容 hexdump()用十六进制方式查看。
summary() 一句话简单描述数据包 ,使用ptk.summary()
show() 查看包的详细内容。 show()2会多一个数据包的校验和。
如果知道一个数据包但是不知道它的类型,用 包.command()会返回这个包的协议。
临时储存包: wrpcap("temp.cap",pkts) 将pkts中的数据包写入文件temp.cap中。
读取:pkts=rdpcap("temp.cap") 返回的是一个列表。
Scapy的发送与监听
ip为目标时用send()发送。 MAC地址为目标时用sendp()发送。 //这两种方式都不会应答。
下面的方法可以发送并且接收。
sr() 和 sr1() 用于ip目标。 srp()用于MAC地址目标
sc()发送时遇到的问题:给192.169.1.1发包没给我应答。nmap随便找了一个存活主机。
后来发现我找成自己的虚拟机ip了,一直等待不给我返回包。我都忘了直接给物理机发个包~
pkt=IP(dst=" 存活IP") / ICMP()
ans,uans=sr(pkt)
ans.summary()
sr1()是返回一个数据包。
抓包用sniff()函数。
sniff(filter="host 192.168.1.1") 只要主机是192.168.1.1的包。
第一个参数:filter
dst host IP 只要目标为本ip的包
ether(dst) host 11:22:33:44:55:66 只要以太网源地址或者目标地址11:22:33:44:55:66的包
src net 192.168.1.0/24 当数据包的IPV4/IPV6的源地址为192.168.1.0/24时,过滤为真。
(dst) port 8080 当数据包是TCP或者UDP 数据包且端口是8080时,过滤为真。
第二个参数:iface
指定网卡。一般默认第一个
第三个参数:prn
可以对捕获的包进行函数处理。 prn=lambda x:x.summary()
第四个参数:count
count=10 捕获10个数据包