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

本文介绍了Python的异常处理机制,使用try/except捕获并处理错误,例如在尝试连接到FTP服务器时处理网络异常。同时展示了如何编写函数进行网络连接和Banner获取,以及如何检查FTP服务器的漏洞。此外,通过for循环实现对IP地址子网的遍历,检查多个端口上的潜在漏洞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、异常处理

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值