Scapy是一个强大的,用Python编写的交互式数据包处理程序,它能让用户发送、嗅探、解析,以及伪造网络报文,从而用来侦测、扫描和向网络发动攻击。Scapy可以轻松地处理扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)之类的传统任务。
1)基础命令
ls():可以显示所有支持的数据包对象。例:list show、ls()
ls(IP) 查看默认参数,注意大写
lsc():列出所有函数
如:arpcachepoison(用于arp毒化攻击,也叫arp欺骗攻击),arping(用于构造一个ARP的包) ,send(用于发3层报文),
sendp(用于发2层报文), sniff(用于网络嗅探), sr(发送+接收3层报文),srp(发送+接收2层报文)
简单的构造IP包
不同层包之间通过“/”来连接,display()和show()可以查看目前的取值情况。
conf:scapy的配置信息,修改方式,conf.verb = *
2)不同数据包操作函数的区别
1、send()在第三层发送数据包,但没有接收功能
>>> send(IP(dst="192.168.115.188")/ICMP())
2、sendp(),在第二层发送数据包,同样没有接收功能
>>> sendp(Ether()/IP(dst="www.baidu.com",ttl=1)/ICMP())
3、sr(),在第三层发送数据包,有接收功能
>>> sr(IP(dst="192.168.115.1")/TCP(dport=[21,22,23]))
4、sr1(),在第三层发送数据包,有接收功能,但只接收第一个包
>>> sr1(IP(dst="192.168.115.188")/ICMP()/"test")
5、srloop(),在第三层工作,如下:
>>> p=srloop(IP(dst="www.baidu.com",ttl=1)/ICMP())
>>> p=srloop(IP(dst="www.baidu.com",ttl=1)/ICMP(),inter=3,count=2)
这里第一条语句在执行时,将会不停的ping百度,第二条执行时每隔3秒ping一次,一共执行两次。
6、srp()、srp1()、srploop()与上面3、4、5相同,只是工作在第二层。
7、简单构造包并返送接收
3)小实验
1、SYN扫描(也叫“半开式扫描”(half-open scanning),因为它没有完成一个完整的TCP连接。)
这种方法向目标端口发送一个SYN分组(packet),如果目标端口返回SYN/ACK,那么可以肯定该端口处于检听状态;否则,返回的是RST/ACK。
>>> ans,unans=sr1(IP(dst="61.135.169.105")/TCP(dport=80,flags="S"))
>>>ans.summary(lambda(s,r):r.sprintf("%TCP.sport% \t %TCP.flags%"))显示
>>>ans.make_table(lambda(s,r):s.dst,s.src,s.ttl)
2、TCP traceroute(traceroute:用来追踪出发点到目的地所经过的路径)
>>>res,unans=traceroute(["www.baidu.com","www.kali.org"],dport=[80,443],maxttl=20,retry=-2)
>>>res.graph() 显示图形
>>>res.graph(target=">/tmp/graph.svg")
3、简单的SNIFF嗅探
>>> sniff(filter="icmp and host 61.135.169.125",count=2)
>>> sniff(iface="ppp0",prn=lambda x:x.summary())
4、二层扫描之ARP扫描
>>>ARP().display()
>>>arp=ARP()
>>>arp.pdst=”192.168.1.1”
>>>anser=sr1(arp) #发送同时收到回应包
5、实现ping命令
>>>i = IP()
>>>p = ICMP()
>>>ping = (i/p)
>>>ping[IP].dst=”192.168.1.1”
>>>ping.display()
>>>anser=sr1(ping) #发送同时收到回应包
安全交流群:687398569