主动信息收集之端口扫描的一些脚本

2024-01-05 21:58

本文主要是介绍主动信息收集之端口扫描的一些脚本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近开始一步步地学习Python,后面将会把各种Python的学习笔记再整合一下,现在先补上上次端口扫描的脚本,因为原理几乎都是利用scapy的一句话所以重复的地方这里就不多说了,有注意点就再说~


udp_scan.py:

#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import time
import sysif len(sys.argv)!=4:print "Usage : ./udp_scan.py [IP] [First Port] [End Port]"sys.exit()ip=sys.argv[1]
start=int(sys.argv[2])
end=int(sys.argv[3])for port in range(start,end):a=sr1(IP(dst=ip)/UDP(dport=port),timeout=5,verbose=0)time.sleep(1)if a==None:print portelse:pass

verbose参数指定为0则表示在返回给变量a的包中先不显示内容。



tcp_scan.py:

#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import sysip=sys.argv[1]
port=int(sys.argv[2])SYN=IP(dst=str(ip))/TCP(dport=port,flags='S')print "-- SENT --"
SYN.display()print "\n\n-- RECEIVED --"
response=sr1(SYN,timeout=1,verbose=0)
response.display()if int(response[TCP].flags)==18:print "\n\n-- SENT --"A=IP(dst=str(ip))/TCP(dport=port,flags='A',ack=(response[TCP].seq+1))A.display()print"\n\n-- RECEIVED --"response2=sr1(A,timeout=1,verbose=0)response2.display()
else:print "SYN/ACK not returned"

这里先显示发送的SYN包,在发送之后再显示接收到的包的内容,如果收到的是SYN/ACK包即收到的包中TCP的flags为18则再发送ACK包来确认。整个过程是通过三次握手来确定的。


syn_scan.py:

#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import sysif len(sys.argv)!=4:print "Usage : ./syn_scan.py [IP] [First Port] [End Port]"sys.exit()ip=sys.argv[1]
start=int(sys.argv[2])
end=int(sys.argv[3])for port in range(start,end):a=sr1(IP(dst=ip)/TCP(dport=port),timeout=1,verbose=0)if a==None:passelse:if int(a[TCP].flags)==18:print portelse:pass

使用默认的TCP扫描即可。



这里用Wireshark来分析为啥值要等于18,打开扫描80端口时返回的包:


可以看到Flags为SA,即Syn和Ack位都为1其它位都为0,将000000010010这个二进制数转化为十进制数刚好为10,所以通过int()函数将该二进制数转化为十进制数从而来进行判断是否是SA包从而推测端口是否开放。


zombie.py:

#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *def ipid(zombie):reply1=sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbose=0)send(IP(dst=zombie)/TCP(flags="SA"),verbose=0)reply2=sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbose=0)if reply2[IP].id==(reply1[IP].id+2):print "IPID sequence is incremental and target appears to be idle. ZOMBIE LOCATED"response=raw_input("Do you want to use this zombie to perform a scan? (Y or N): ")if response=="Y":target=raw_input("Enter the IP address of the target system: ")zombiescan(target,zombie)else:print "Either the IPID sequence is not incremental or the target is not idle. NOT A GOOD ZOMBIE"def zombiescan(target,zombie):print "\nScanning target "+target+" with zombie "+zombieprint "\n-----Open Ports on Target-----\n"for port in range(1,1000):try:start_val=sr1(IP(dst=zombie)/TCP(flags="SA",dport=port),timeout=2,verbose=0)send(IP(src=zombie,dst=target)/TCP(flags="S",dport=port),verbose=0)end_val=sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbose=0)if end_val[IP].id==(start_val[IP].id+2):print portexcept:passprint "-----Zombie Scan Suite-----\n"
print "1 - Identify Zombie Host \n"
print "2 - Perform Zombie Scan \n"
ans=raw_input("Select an Option (1 or 2) : ")
if ans=="1":zombie=raw_input("Enter IP address to test IPID sequence : ")ipid(zombie)
else:if ans=="2":zombie=raw_input("Enter IP address for zombie system : ")target=raw_input("Enter IP address for scan target : ")zombiescan(target.zombie)

程序分为两个部分,先是询问是否要进行Zombie机的测试,然后再利用Zombie机来扫描目标主机。原理在上一篇已经说得差不多了这里就不多讲了。




往后会接着写更多关于Python的学习笔记,望各位指导指导~

这篇关于主动信息收集之端口扫描的一些脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/574280

相关文章

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断