py异常处理、函数、迭代

举报
黑色地带(崛起) 发表于 2023/02/20 22:26:58 2023/02/20
【摘要】 py异常处理、函数、迭代

 目录

一、异常处理

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()



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。