scapy基本使用
什么是scapy
Scapy是一个强大的,用Python编写的交互式数据包处理程序,它能让用户发送、嗅探、解析,以及伪造网络报文,从而用来侦测、扫描和向网络发动攻击。Scapy可以轻松地处理扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)之类的传统任务。它可以代替hping
,arpspoof
,arp-sk
,arping
,p0f
甚至是部分的Nmap
,tcpdump
和tshark
的功能。
基本函数介绍
-
ls()查看支持的网络协议
有很多,基本的协议都可以
ls(协议)可以产看协议的参数
- lsc()查看函数
-
send
发送三层报文
尝试构造IP包
发送
Wireshark本机监听,成功构造
发送的是三层报文
-
sendp()
构造二层报文
构造一个数据链路层包
构造一个arp包
发送
可以看到已经成功发送了
内容为abc
-
src
发送三层报文并查看返回报文
先构造一个icmp包
wireshark查看
-
srcp
二层并接受返回报文
常用脚本
ping扫描
扫描单个主机
#!/usr/bin/env python
import sys
from scapy.all import *
print "pinging the target...."
ip = sys.argv[1]
icmp = IP(dst=ip)/ICMP()
ans, unans = sr(icmp)
if ans == None:
print "This host is down"
else:
print "This host is up"
print ans
扫描网段
#!/usr/bin/env python
import sys
from scapy.all import *
print "pinging..."
ip = sys.argv[1]
icmp = IP(dst=ip)/ICMP()
ans, unans = sr(icmp)
if ans:
ans.summary(lambda (s, r): r.sprintf("%IP.src% is alive"))
版本二
#!/usr/bin/python
from scapy.all import *
TIMEOUT = 2
conf.verb = 0
for ip in range(0, 11):
packet = IP(dst="192.168.124." + str(ip), ttl=20)/ICMP()
reply = sr1(packet, timeout=TIMEOUT)
if not (reply is None):
print reply.src, "is online"
else:
print "Timeout waiting for %s" % packet[IP].dst