python实现FTP弱口令扫描器与简单端口扫描器
python实现FTP弱口令扫描器与简单端口扫描器
目录
FTP弱口令扫描器 简单端口扫描器
参考:
https://blog.csdn.net/rebelqsp/article/details/22109925
https://www.aliyun.com/jiaocheng/434055.html?spm=5176.100033.2.10.3571581eheCuHX
FTP弱口令扫描器
# Ftp匿名扫描器的实现,需要使用FTP这个类
# Ftp这个类实现了Ftp客户端的大多数功能,比如连接Ftp服务器、查看服务器中的文件、上传、下载文件等功能, import ftplib
import time
import argparse #FTP匿名登录扫描
# 首先用主机名构造了一个Ftp对象(即ftp),然后用这个ftp调用不带任何参数的login()函数即表示要匿名登录这个Ftp服务器,如果登录过程中没有产生异常,则表明匿名登录成功,否则匿名登录失败!
def anonScan(hostname): #参数是主机名
try:
with ftplib.FTP(hostname) as ftp:#创建Ftp对象
ftp.login() #Ftp匿名登录
print('\n[*] ' + str(hostname) + " FTP Anonymous login successful!") #不抛出异常则表明登录成功
return True
except Exception as e:#抛出异常则表明匿名登录失败
print('\n[-] ' + str(hostname) + " FTP Anonymous logon failure!")
return False # FTP弱口令扫描==暴力破解
# Ftp弱口令的扫描依赖于用户名和密码字典,我们的实验环境中会提供 pwd.txt 作为密码字典,字典的格式如下图所示:
# 用户名:密码 # 循环从字典中读取用户名和密码并尝试登陆,登陆成功则表明找到用户名和密码。由于这个函数将主机名定义成了可以用“,”分割的字符串。找到密码并不会终止程序,而是会继续扫描其他主机的弱口令,直到所有的主机都扫描一遍。
def vlcLogin(hostname, pwdFile):#参数(主机名,字典文件)
try:
with open(pwdFile, 'r') as pf:#打开字典文件
for line in pf.readlines(): #循环读取字典文件中的每一行
time.sleep(1) #等待1秒
userName = line.split(':')[0] #从读取的内容中取出用户名
passWord = line.split(':')[1].strip('/r').strip('/n') #从读取的内容中取出密码
print('[+]'+str(hostname)+':Trying: ' + userName + ':' + passWord)
try:
with ftplib.FTP(hostname) as ftp:#以主机名为参数构造Ftp对象
ftp.login(userName, passWord) #使用读取出的用户名密码登录Ftp服务器
#如果没有产生异常则表示登录成功,打印主机名、用户名和密码
print('[*] ' + str(hostname) + ' FTP Login successful: '+ userName + ':' + passWord)
return (userName, passWord)
except Exception as e:
# 产生异常表示没有登录成功,这里我们不用管它,继续尝试其他用户名、密码
pass
print("破解失败") except IOError as e:
print('Error: the password file does not exist!')
print('[-] Cannot crack the FTP password, please change the password dictionary try again!')
return (None,None) def main():
parser = argparse.ArgumentParser(description='FTP Scanner')
# 添加-H命令dest可以理解为咱们解析时获取-H参数后面值的变量名,help是这个命令的帮助信息
parser.add_argument('-H', dest='hostName', help='The host list with ","space')
parser.add_argument('-f', dest='pwdFile', help='Password dictionary file')
options = None
try:
options = parser.parse_args()
except:
print(parser.parse_args(['-h'])) ip = str(options.hostName)
pwdFile = str(options.pwdFile) if anonScan(ip):pass
else:vlcLogin(ip,pwdFile) if __name__ == '__main__':
main()
简单端口扫描器
这里使用多线程的操作是很有必要的。这里,一个很自然的思路就是为每一个端口单独开一个线程进行扫描。
所以你也可以将需要扫描的端口列表定为从Nmap中得到的前1000个使用频率最高的端口,例如下面:
port_list = [1,3,6,9,13,17,19,20,21,22,23,24,25,30,32,37,42,49,53,70,79,80,81,82,83,84,88,89,99,106,109,110,113,119,125,135,139,143,146,161,163,179,199,211,222,254,255,259,264
,280,301,306,3]
对于一个给定的ip地址,扫描的过程是这样的:
1. 每一个端口创建一个线程,添加到线程列表
2. 利用connect_ex函数对该(ip,port)进行连接操作。
3. 调用thread.start()和thread.join()方法,使扫描的子线程开始工作并且命令主线程等待子线程死亡后再结束。
4. 重复这个过程直到所有的端口都被扫描过。
import socket, time, threading
socket.setdefaulttimeout(3) def socket_port(ip,port):
"""
输入IP和端口号,扫描判断端口是否开放
""" try:
if port>=65535:
print('端口扫描结束')
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result=s.connect_ex((ip,port)) #返回值为0则表示端口open
if result==0:
print(ip+':',port,'端口开放')
s.close() #
except:
print('端口扫描异常') def ip_scan(ip,thread_list):
"""
输入IP,扫描IP的0-65534端口情况
""" try:
print('开始扫描 %s' % ip)
start_time=time.time()
for i in range(0,65534):
t = threading.Thread(target=socket_port,args=(ip,i))
t.start()
thread_list.append(t)
for thread in thread_list:
thread.join()
print('扫描端口完成,总共用时 :%.2f' %(time.time()-start_time))
except:
print('扫描ip出错') if __name__=='__main__':
ip=input('Input the ip you want to scan:\n')
thread_list=[]
lock = threading.Lock()
ip_scan(ip,thread_list)
python实现FTP弱口令扫描器与简单端口扫描器的更多相关文章
- FTP弱口令猜解【python脚本】
ftp弱口令猜解 python脚本: #! /usr/bin/env python # _*_ coding:utf-8 _*_ import ftplib,time username_list=[' ...
- Python写安全小工具-TCP全连接端口扫描器
通过端口扫描我们可以知道目标主机都开放了哪些服务,下面通过TCP connect来实现一个TCP全连接端口扫描器. 一个简单的端口扫描器 #!/usr/bin/python3 # -*- coding ...
- [原创]K8Cscan插件之FTP弱口令扫描
[原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...
- FTP匿名登录或弱口令漏洞及服务加固
漏洞描述 FTP 弱口令或匿名登录漏洞,一般指使用 FTP 的用户启用了匿名登录功能,或系统口令的长度太短.复杂度不够.仅包含数字.或仅包含字母等,容易被黑客攻击,发生恶意文件上传或更严重的入侵行为. ...
- [源码]python Scapy Ftp密码嗅探
[源码]python Scapy Ftp密码嗅探 原理很简单,FTP密码明文传输的 截取tcp 21端口User和Pass数据即可 Scapy框架编译程序较大(一个空程序都25M),所以就不提供exe ...
- mac/unix系统:C++实现一个端口扫描器
在比较早以前,我用过S扫描器, 以及大名鼎鼎的nmap扫描器, 可以快速扫描某个主机开放的端口, 今天使用C实现这样一个软件, 编译环境为Mac, 系统版本10.11.6: #include < ...
- Python Telnet弱口令爆破脚本及遇到的错误与问题
写得时候遇到了一个很大的问题,就是我在发送用户名,接受用户名就会一直卡住.然后等了好久后提示 recv ‘\r\nSession timed out.\r\n\r\nTelnet Server has ...
- Telnet弱口令猜解【Python脚本】
telnet 弱口令猜解脚本 测试环境:window2003.centos7 #! /usr/bin/env python # _*_ coding:utf-8 _*_ import telnetli ...
- PHPMyAdmin弱口令猜解【Python脚本】
PHPMyAdmin弱口令猜解 测试截图: 代码片段 #! /usr/bin/env python # _*_ coding:utf-8 _*_ import requests import time ...
随机推荐
- Flask最强攻略 - 跟DragonFire学Flask - 第八篇 实例化Flask的参数 及 对app的配置
Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...
- C# 进程的挂起与恢复
1. 源起: 仍然是模块化编程所引发的需求.产品经理难伺候,女产品经理更甚之~:p 纯属戏谑,技术方案与产品经理无关,芋头莫怪! VCU10项目重构,要求各功能模块以独立进程方式实现,比如:音视频转换 ...
- 使用layer 弹出对话框 子父页面相互参数传递 父页面获取子页面参数实例
一.先看效果: 1.点击三个点的图标弹出了子页面: 2.子页面调用父页面方法,图一调用父页面方法,图二得到父页面var变量. 3.选择之后,关闭弹框,父页面得到子页面单选框选择的v ...
- oracle 行号和分页
1.行号是个伪列,rownum 永远按照默认的顺序生成 2.rownum 只能使用< <= 不能使用> >=(原因是oracle数据库是行式数据库,像盖楼一样,没有第一层就排 ...
- GCC选项_-Wl,-soname 及 DT_NEEDED 的解释
-Wl选项告诉编译器将后面的参数传递给链接器. -soname则指定了动态库的soname(简单共享名,Short for shared object name) soname的关键功能是它提供了兼容 ...
- mysqlbinlog恢复数据注意事项【转】
mysqlbinlog 恢复数据注意事项 前言: 上次有个有个朋友恢复 MySQL 数据,一直恢复不成功,也没有报错信息,使用的环境是 MySQL 5.7 使用了 GTID 以及 binlog 格式为 ...
- 转载:Nginx的命令行控制(1.6)《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19621.html 在Linux中,需要使用命令行来控制Nginx服务器的启动与停止.重载配置文件.回滚日志文件.平滑升级等行为.默认 ...
- PYTHON-基本数据类型-元祖类型,字典类型,集合类型-练习
# 1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],# 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中## 即: ...
- Android Menu用法全面讲解
说明:本文只介绍Android3.0及以上的Menu知识点. 菜单的分类 菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单.上下文菜单/上下文操作模式以及弹出菜单.它们的 ...
- Coursera台大机器学习技法课程笔记07-Blending and Bagging
这一节讲如何将得到的feature或hypothesis组合起来用于预测. 1. 林老师给出了几种方法 在选择g时,需要选择一个很强的g来确保Eval最小,但如果每个g都很弱该怎么办呢 这个时候可以选 ...