kali渗透测试与教学笔记12:强大的数据包处理程序scapy

Scapy是Python写的一个功能强大的交互式数据包处理程序,可用来发送、嗅探、解析和伪造网络数据包,常常被用到网络攻击和测试中。

启动scapy。命令行输入scapy

输入命令“ARP().display()”发送一个ARP请求包,显示出数据报模板。

在发送数据包前,需要设置一下数据包参数。如:

arp_request=ARP()

arp_request.pdst="10.10.10.129"

arp_request.display()

数据包参数设置完毕,输入命令“sr1(arp_request)”发送数据包。display()函数也可以应用于创建ARP对象,用来验证已经更新配置的值。sr1()函数可以用来发送ARP请求包,并且可以返回响应。但是sr1()函数,只能接收一个响应包。例如,使用sr1()函数发送一个请求,并收到响应,执行命令如下所示:

sr1(arp_request)

语句执行后,可以返回目标主机的MAC地址

如果目标主机处于关机和不存在状态,sr1()函数会继续分析传入的流量,按下Ctrl+C强制停止,或者使用参数timeouts,在指定的时间内,将会停止sr1()函数。下面设置arp_request.pdst参数为一个不存在的主机地址,然后发送ARP数据包。

设置一下timeout参数值,然sr1()函数在1秒钟后停止运行。执行命令如下所示:

sr1(arp_request,timeout=1)

使用scapy对目标主机扫描

指定一个初始变量ip,在提示符下输入>>> ip=IP()。然后查看ip参数,在提示符下输入>>> ip.display(),输出信息显示了,Ip变量的默认配置信息,根据实际情况更改src和dst参数。

将目标地址dst修改为10.10.10.129,执行命令>>> ip.dst="10.10.10.129",输出信息中显示目标dst地址修改为10.10.10.129,源IP地址也修改为网卡IP地址10.10.10.128。

在IP层上创建第二层数据包icmp参数,定义ICMP模板数据包ping。在提示符下输入ping=ICMP()。

利用“/”把创建的两个数据包组装,执行命令>>> ping_request=(ip/ping),以上输出信息显示数据包封装完毕,可以发送出去了。

利用函数sr1()发送,执行如下命令>>> ping_reply=sr1(ping_request),输出信息中,显示一共收到3个数据包,包含一个响应包,ICMP类型为echo-reply。

用同样的操作,响一个不存在的主机发送数据包(目标地址:192.168.1.200),输出信息中,显示响应数据包为0,说明主机无法访问。函数sr1()会一直监听,知道接收到回应包。这里按Ctrl+C强制停止了发送数据包。

>>> ip.dst="192.168.1.200"
>>> ping_request=(ip/ping)
>>> ping_reply=sr1(ping_request)

也可以设置sr1的timeout参数,设置停止时间

利用脚本扫描主机

vi ping.py
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    print "Usage - ./pinger.py [/24 network address]"
    print "Example will perform an ICMP scan of the 192.168.1.0/24 range"
#!/usr/bin/python
from scapy.all import *
if len(sys.argv) != 2:
    print "Example - ./pinger.py 192.168.1.0"
    sys.exit()
address = str(sys.argv[1])
prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.'
for addr in range(150,158):  //根据具体环境填写参数
    answer=sr1(ARP(pdst=prefix+str(addr)),timeout=1,verbose=0)
    if answer == None:
            pass
    else:
            print prefix+str(addr)

接下来,赋予ping.py可执行权限

chmod +x ping.py

运行ping.py脚本文件,扫描活跃主机:       ./ping.py 192.168.1.0

利用scapy发送TCP ACK数据包扫描主机

设置一个变量名n,利用IP()函数初始化变量n。输入命令>>> n=IP(),查看默认参数,输入命令>>> n.display()。

修改dst参数,输入命令>>>n.dst="192.168.1.3" ,查看n修改后参数,输入命令>>>n.display(),输出信息中,参数dst已经修改了,并且参数src也自动修改。

设置TCP()函数变量t,输入命令>>> t=TCP()。查看变量t的默认参数,输入命令>>> t.display()。

置t变量参数flags,输入命令>>> t.flags=‘A’。查看t变量的参数,输入命令>>> t.display(),输出信息显示TCP标志位已经设置为ACK

说明scapy环境实在python2.7下,可以用help()进行查看相关帮助

将两个变量n和变量t组装数据包发送,输入命令>>> request=(n/t)。查看组装的数据包,输入命令>>> request.display()

利用sr1()函数,发送数据包request。输入命令>>> response=sr1(request),查看收到的回应包,输入命令>>> response.display(),输出信息,表示目标主机响应了发送主机一个数据包。

下面访问一个不存在的主机(192.168.1.200),输入命令>>> n.dst=” 192.168.1.200”。从新封装数据包,输入命令>>> request=(n/t)。显示新封装的数据包,输入命令>>>request.display()。

利用函数sr1()发送新封装的数据包,输入命令>>>response=sr1(request),输出信息数据包无法到达。结束监听需要按ctrl+c键。

在函数sr1()增加一个timeout=1参数,输入命令>>>response=sr1(request,timeout=1)。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值