没有合适的资源?快使用搜索试试~ 我知道了~
首页扫描器篇(五)之scapy构造UDP数据包完成主机发现
扫描器篇(五)之scapy构造UDP数据包完成主机发现
17 下载量 106 浏览量
更新于2023-05-03
评论
收藏 190KB PDF 举报
udp协议扫描 发现原理 向目标主机发送一个,没有开放的端口发送数据,目标主机会返回一个ICMP 目标端口不可达的消息,通过该特征可以对主机进行判断是否在线 注意事项 如果目标主机端口不在线,或者在线且目标端口为开放状态,那么发送出去的UDP数据包不会收到任何回复 判断条件 以返回包中的ip部分proto参数的值作为判断条件,确定目标主机是否返回ICMP消息, 原理是ip包头中的protocol部分用于标记上层协议类型,如果数值为0x01的话表示ICMP 代码部分 数据包构造扫描部分 通过python发包神器scapy构造UDP数据包 端口一定要选择没有开放的,不然
资源详情
资源评论
资源推荐
扫描器篇扫描器篇(五五)之之scapy构造构造UDP数据包完成主机发现数据包完成主机发现
udp协议扫描协议扫描
发现原理发现原理
向目标主机发送一个,没有开放的端口发送数据,目标主机会返回一个ICMP
目标端口不可达的消息,通过该特征可以对主机进行判断是否在线
注意事项注意事项
如果目标主机端口不在线,或者在线且目标端口为开放状态,那么发送出去的UDP数据包不会收到任何回复
判断条件判断条件
以返回包中的ip部分proto参数的值作为判断条件,确定目标主机是否返回ICMP消息,
原理是ip包头中的protocol部分用于标记上层协议类型,如果数值为0x01的话表示ICMP
代码部分代码部分
数据包构造扫描部分
通过python发包神器scapy构造UDP数据包
端口一定要选择没有开放的,不然会扫描不到主机
def scan(ip):
try: # 端口要求一定是没开放
packet = IP(dst=ip)/UDP(dport=56789)
result = sr1(packet,timeout=0.5,verbose=0)
#result.show()
if int(result[IP].proto) == 0x01: # 0x01 代表的ICMP字段值
time.sleep(0.1)
print(ip + ' ' + "on line")
except:
return
参数获取部分
通过optparse模块接收用户提供的参数,判断是扫描整个网段还是读取ip地址文件
获取到地址后再通过Thread多线程去发送数据包
def main():
# 生成帮助信息,以及接收用户输入的参数,并建立对象
usage = "Usage: arp扫描.py -f -i "
parse = OptionParser(usage=usage)
parse.add_option("-f", "--file", type="string", dest="filename", help="specify the IP address file")
parse.add_option("-i", '--ip', type="string", dest="address", help="specify the IP address")
(option, args) = parse.parse_args()
filename = option.filename
address = option.address
# 判断是不是地址文件
if filename:
if not os.path.exists(filename): #判断文件是否存在
print("The file does not exist. Please enter it again")
sys.exit()
with open(filename, "r") as f: #读取文件
for i in f.readlines():
ip = i.strip()
t = Thread(target=scan, args=(ip,))
t.start()
# 判断是不是整个网段
if address:
prefix = address.split(".")[0] + '.' + address.split(".")[1] + '.' + address.split(".")[2] + "." # 将用户输入的地址以.作为分隔符
for i in range(0, 255):
ip = prefix + str(i) #构造扫描整个网段所需ip
t = Thread(target=scan, args=(ip,))
t.start()
整体代码整体代码
import os
import time
from optparse import OptionParser
from scapy.all import *
def scan(ip):
try:
packet = IP(dst=ip)/UDP(dport=56789)
result = sr1(packet,timeout=0.5,verbose=0)
#result.show()
if int(result[IP].proto) == 0x01: # 0x01 代表的ICMP字段值
time.sleep(0.1)
print(ip + ' ' + "on line")
except:
weixin_38524246
- 粉丝: 6
- 资源: 920
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0