【Python脚本进阶】1.2、python脚本基础知识(中)

2023-10-30

目录

一、异常处理

1.1、简介:

1.2、示例:

二、函数:

2.1、简介:

2.2、示例1:

2.3、示例2:

三、迭代

3.1、简介:

3.2、示例1:

3.3、示例2:

3.4、示例3:

3.5、示例4:


(我所用为python3+pycharm)

一、异常处理

1.1、简介:

1、编写的程序语法完全正确, 在程序运行或执行时仍可能出错(最典型的就是除零错,因为0 不能作为除数, Python 解释器会显示该错误,并会终止程序的执行)

2、在正在运行的程序或脚本的上下文环境中处理错误:异常处理功能

try/except语句进行异常处理。当错误发生时, 异常处理捕获这一错误并在屏幕上打印一条消息

3、为了获取错误的确切信息,把异常存储到变量e中, 以便将其打印出来, 同时还要将变量e转换成一个字符串


try:

        print(''100/0 = "+str(100/0))

except Exception as e:

        print("Error = "+str(e))

注(版本兼容问题):

python2:except Exception,e:

python3:except Exception as e:

1.2、示例:

用异常处理来更新抓取banner 的脚本。把网络连接代码写在try 语句块中, 尝试连接到一台没有在TCP 端口21 上运行FTP 服务的机器。 就会看到一条报错的消息

import socket

socket.setdefaulttimeout(2)

s=socket.socket()

try:

        s.connect(('192.168.190.131',21))

except Exception as e:

        print('Error='+str(e))



二、函数:

2.1、简介:

函数提供了高效的可重用代码块,python自带许多内置函数, 也可以创建定义的函数

关键字def()表示函数开始,并且可以在括号内填写任何变量,这些变量会被以引用的方式传递给函数

2.2、示例1:

创建一个函数来完成连接到FTP 服务器并返回banner的操作

(我直接使用pycharm运行的,节省调试时间)

import socket


def retbanner(ip, port):
    try:
        socket.setdefaulttimeout(2)
        s = socket.socket()
        s.connect((ip, port))
        banner = s.recv(1024)
        return banner
    except Exception as e:
        return e


def main():
    ip1 = '127.0.0.1'
    ip2 = '192.168.190.131'
    port = 8080
    banner1 = retbanner(ip1, port)
    if banner1:
        print(ip1 + ': ' + str(banner1))
    banner2 = retbanner(ip2, port)
    if banner2:
        print(ip2 + ': ' + str(banner2))


if __name__ == '__main__':
    main()

2.3、示例2:

banner返回后, 我们的脚本需要把它们和一些已知有漏洞的程序(的banner)进行比较

checkVulns()函数接收参数banner变量, 并以此来判断服务器中是否存在漏洞

import socket


def retbanner(ip, port):
    try:
        socket.setdefaulttimeout(2)
        s = socket.socket()
        s.connect((ip, port))
        banner = s.recv(1024)
        return banner
    except Exception as e:
        return e


def checkVulns(banner):
    if "FreeFloat Ftp Server (Version 1.00)" in banner:
        print(" FreeFloat FTP Server is vulnerable.")
    elif "3Com 3CDaemon FTP Server Version 2.0" in banner:
        print(" FreeFloat FTP Server is vulnerable.")
    elif "Ability Server 2.34" in banner:
        print(" FreeFloat FTP Server is vulnerable.")
    elif "Sami FTP Server 2.0.2" in banner:
        print(" FreeFloat FTP Server is vulnerable.")
    else:
        print("FTP Server is not vulnerable.")
    return


def main():
    ip1 = '127.0.0.1'
    ip2 = '192.168.190.131'
    port = 8080
    banner1 = retbanner(ip1, port)
    if banner1:
        print(ip1 + ': ' + str(banner1).strip('\n'))
        checkVulns(banner1)
    banner2 = retbanner(ip2, port)
    if banner2:
        print(ip2 + ': ' + str(banner2).strip('\n'))
        checkVulns(banner2)


if __name__ == '__main__':
    main()


三、迭代

3.1、简介:

检查三个不同的IP地址,与写三次相同的程序相比, 用for循环遍历多个元素可能更容易

3.2、示例1:

如果想遍历IP地址从192.168.95.1到192.168.95.254的整个/24子网, 使用for循环(范围从1
到255)可以打印出整个子网

for x in range(1,255):
    print("192.168.95."+str(x))

(range还可设置每个间距)

3.3、示例2:

遍历所有已知端口列表的方式检查漏洞, 只需遍历某个list中的所有元素即可, 无须遍历某个范围内的所有数字

portList = [21, 22, 25, 80, 110]
for port in portList:
    print(port)

3.4、示例3:

通过嵌套两个for循环, 我们可以打印出每个IP地址上的每个端口

portList = [21, 22, 25, 80, 110]
for port in portList:
    print(port)

for x in range(1, 255):
    for port in portList:
        print('Checking 192.168.190.' + str(x) + ': ' + str(port))

3.5、示例4:

利用迭代IP 地址和端口, 更新漏洞检查脚本。现在, 脚本将测试192.168.190.0/24子网上的所有254个IP地址, 测试的端口包括telnet 、SSH、SMTP、HTTP、IMAP及HTTPS协议的端口

import socket


def retbanner(ip, port):
    try:
        socket.setdefaulttimeout(2)
        s = socket.socket()
        s.connect((ip, port))
        banner = s.recv(1024)
        return banner
    except Exception as e:
        return e


def checkVulns(banner):
    if "FreeFloat Ftp Server (Version 1.00)" in banner:
        print(" FreeFloat FTP Server is vulnerable.")
    elif "3Com 3CDaemon FTP Server Version 2.0" in banner:
        print(" FreeFloat FTP Server is vulnerable.")
    elif "Ability Server 2.34" in banner:
        print(" FreeFloat FTP Server is vulnerable.")
    elif "Sami FTP Server 2.0.2" in banner:
        print(" FreeFloat FTP Server is vulnerable.")
    else:
        print("FTP Server is not vulnerable.")
    return


def main():
    portList = [21, 22, 25, 80, 110, 443]
    for x in range(1,255):
        ip = '192.168.190.' + str(x)
        for port in portList:
            banner = retbanner(ip, port)
            if banner:
                print(ip + ': ' + str(banner))
                checkVulns(banner)


if __name__ == '__main__':
    main()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python脚本进阶】1.2、python脚本基础知识(中) 的相关文章

随机推荐

  • error at ::0 can't find referenced pointcut..

    这个问题主要是因为aspect版本与jdk版本相差太远 我使用jdk7 aspect 为spring2 0中自带的aspect jar 解决方案 1 将jdk版本降至六以下 包括6 2 提升aspect的版本 下载地址 http jarfi
  • unity3d鼠标移动、旋转物体

    为了从不同角度观察物体 需要使用鼠标改变物体的位置及角度 在unity3d中Input GetMouseButton 获得鼠标键 Input GetAxis 函数获得鼠标的移动的方向和距离 其中Mouse X表示X方向 Mouse Y表示Y
  • Java 一个简单的线程定时 (守护线程)

    守护线程也叫精灵线程 当程序只剩下守护线程的时候 程序就会退出 守护线程的作用类似在后台静默执行 比如JVM的垃圾回收机制 应用场景 实例化socket连接时需要判断连接成功与否 一般来说 如果连接成功就是片刻的事 如果不成功的话jvm会判
  • python如何读取文件夹下的子文件夹

    import os 创建文件夹 def mkdir path if os path exists path False os mkdir path else pass 根目录 root path C Users man wang Deskt
  • Js(一)Error [ERR_MODULE_NOT_FOUND]: Cannot find package ‘uuid‘ imported

    前言 本章主要讲述js报错之 Error ERR MODULE NOT FOUND Cannot find package uuid imported from xxx的解决 一 问题描述 问题 顾名思义 根据错误信息翻译 该文件路径下找不
  • 【华为OD机试真题 JS】贪吃蛇

    标题 贪吃蛇 时间限制 1秒 内存限制 262144K 语言限制 不限 贪吃蛇是一个经典游戏 蛇的身体由若干方格连接而成 身体随蛇头移动 蛇头触碰到食物时 蛇的长度会增加一格 蛇头和身体的任一方格或者游戏版图边界碰撞时 游戏结束 下面让我们
  • 一个java源文件中只能有一个public类

    java文件只有一个public类 1 每个编译单元 文件 只能有一个public 类 这么做的意思是 每个编译单元只能有一个公开的接口 而这个接口就由其public 类来表示 2 java程序的入口是main方法 所以被定为public的
  • Spring Cloud Sleuth 2.0概要使用说明

    Sleuth Zipkin和Brave 先说一下Spring Cloud Sleuth Zipkin和Brave三者之间的关系 首先 对于Spring Cloud Sleuth来说 大家或许接触的比较多 它是Spring框架家族 在这里为什
  • maven可执行jar及加载文件

    1 使用maven assembly plugin插件打包 1 1 代码 地址 https gitee com xixingzhe2 learn tree master jar exe test demo pom xml
  • CommonJS, AMD 和 RequireJS之间的关系(转载)

    先说说CommonJS CommonJS 大家是不是觉得JavaScript仅仅是一个客户端的编译语言 其实JavaScript设计之初不仅仅是针对客户端设计的语言 后来只是由于Web的迅速流行 加之Netscape和微软之间之争过早的将J
  • 每年等额本金,计算复利的方法

    最近正在学理财 就顺手写了个复利的计算方法 小记一下 public class CompoundInterestCalculation public static void main String args 计算公式V P 1 i 1 i
  • springmvc+mybatis+maven项目框架搭建

    项目的目录 1 配置web xml
  • Unity游戏开发之游戏动画(Unity动画系统)

    文章目录 Unity动画系统 动画片段 Animation Clip 在Unity中制作动画 动画复用 替身系统 Avatar Animator 组件 Animator Component 动画状态机 Animator Controller
  • vue axios 上传文件 xhr.addEventListener is not a function(…) 问题修复 不用卸载 mockjs

    vue axios 上传文件 xhr addEventListener is not a function 问题修复 不用卸载 mockjs 无法上传的原因是因为 mockjs 将 axios请求 的 XhrRequest 修改成了Mock
  • 解决”/bin/rm: Argument list too long”删除文件错误

    执行rm后出现 bin rm Argument list too long 报错 应该是目录中的文件太多 处理时间太长导致的 ls xargs n 10000 rm rf 通过xargs命令 将文件10个分成一组 然后分批删除 这样就不会出
  • 5.3 分布式 Git - 维护项目

    5 3 分布式 Git 维护项目 版本说明 版本 作者 日期 备注 0 1 loon 2019 3 28 初稿 目录 文章目录 5 3 分布式 Git 维护项目 版本说明 目录 维护项目 1 在特性分支中工作 2 应用来自邮件的补丁 3 使
  • 字节跳动视频编解码面经

    引言 本文主要是记录一下面试字节跳动的经历 三四月份投了字节跳动的实习 图形图像岗位 然后hr打电话过来问了一下会不会opengl c shador 当时只会一点c 其他两个都不会 也就直接被拒了 七月初内推了字节跳动的提前批 因为内推没有
  • MybatisPlus中的的BaseMapper接口的认识

    接上一篇博客 还是在接手别人的代码的时候 看到了如下的代码 当时自己只是查询了以下wrapper构造器的用法 这里其实还有一个MybatisPlus中的BaseMapper接口的用法 上面这句代码的意思其实就相当于 SELECT COUNT
  • Spring boot+Vue3博客平台:文章发布与编辑功能的技术实现

    本文将详细介绍如何实现一个博客平台中的文章发布与编辑功能 包括前端的Vue组件设计和后端的Spring Boot接口实现 在阅读本文后 您将了解如何设计和实现高效 易用的文章发布与编辑功能 一 发布文章 设计思路 在设计文章发布功能时 我们
  • 【Python脚本进阶】1.2、python脚本基础知识(中)

    目录 一 异常处理 1 1 简介 1 2 示例 二 函数 2 1 简介 2 2 示例1 2 3 示例2 三 迭代 3 1 简介 3 2 示例1 3 3 示例2 3 4 示例3 3 5 示例4 我所用为python3 pycharm 一 异常