• 【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)

    一、异常处理

    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运行的,节省调试时间)

    1. import socket
    2. def retbanner(ip, port):
    3. try:
    4. socket.setdefaulttimeout(2)
    5. s = socket.socket()
    6. s.connect((ip, port))
    7. banner = s.recv(1024)
    8. return banner
    9. except Exception as e:
    10. return e
    11. def main():
    12. ip1 = '127.0.0.1'
    13. ip2 = '192.168.190.131'
    14. port = 8080
    15. banner1 = retbanner(ip1, port)
    16. if banner1:
    17. print(ip1 + ': ' + str(banner1))
    18. banner2 = retbanner(ip2, port)
    19. if banner2:
    20. print(ip2 + ': ' + str(banner2))
    21. if __name__ == '__main__':
    22. main()

    2.3、示例2:

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

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

    1. import socket
    2. def retbanner(ip, port):
    3. try:
    4. socket.setdefaulttimeout(2)
    5. s = socket.socket()
    6. s.connect((ip, port))
    7. banner = s.recv(1024)
    8. return banner
    9. except Exception as e:
    10. return e
    11. def checkVulns(banner):
    12. if "FreeFloat Ftp Server (Version 1.00)" in banner:
    13. print(" FreeFloat FTP Server is vulnerable.")
    14. elif "3Com 3CDaemon FTP Server Version 2.0" in banner:
    15. print(" FreeFloat FTP Server is vulnerable.")
    16. elif "Ability Server 2.34" in banner:
    17. print(" FreeFloat FTP Server is vulnerable.")
    18. elif "Sami FTP Server 2.0.2" in banner:
    19. print(" FreeFloat FTP Server is vulnerable.")
    20. else:
    21. print("FTP Server is not vulnerable.")
    22. return
    23. def main():
    24. ip1 = '127.0.0.1'
    25. ip2 = '192.168.190.131'
    26. port = 8080
    27. banner1 = retbanner(ip1, port)
    28. if banner1:
    29. print(ip1 + ': ' + str(banner1).strip('\n'))
    30. checkVulns(banner1)
    31. banner2 = retbanner(ip2, port)
    32. if banner2:
    33. print(ip2 + ': ' + str(banner2).strip('\n'))
    34. checkVulns(banner2)
    35. if __name__ == '__main__':
    36. main()


    三、迭代

    3.1、简介:

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

    3.2、示例1:

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

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

    (range还可设置每个间距)

    3.3、示例2:

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

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

    3.4、示例3:

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

    1. portList = [21, 22, 25, 80, 110]
    2. for port in portList:
    3. print(port)
    4. for x in range(1, 255):
    5. for port in portList:
    6. 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协议的端口

    1. import socket
    2. def retbanner(ip, port):
    3. try:
    4. socket.setdefaulttimeout(2)
    5. s = socket.socket()
    6. s.connect((ip, port))
    7. banner = s.recv(1024)
    8. return banner
    9. except Exception as e:
    10. return e
    11. def checkVulns(banner):
    12. if "FreeFloat Ftp Server (Version 1.00)" in banner:
    13. print(" FreeFloat FTP Server is vulnerable.")
    14. elif "3Com 3CDaemon FTP Server Version 2.0" in banner:
    15. print(" FreeFloat FTP Server is vulnerable.")
    16. elif "Ability Server 2.34" in banner:
    17. print(" FreeFloat FTP Server is vulnerable.")
    18. elif "Sami FTP Server 2.0.2" in banner:
    19. print(" FreeFloat FTP Server is vulnerable.")
    20. else:
    21. print("FTP Server is not vulnerable.")
    22. return
    23. def main():
    24. portList = [21, 22, 25, 80, 110, 443]
    25. for x in range(1,255):
    26. ip = '192.168.190.' + str(x)
    27. for port in portList:
    28. banner = retbanner(ip, port)
    29. if banner:
    30. print(ip + ': ' + str(banner))
    31. checkVulns(banner)
    32. if __name__ == '__main__':
    33. main()

  • 相关阅读:
    Rust 错误处理
    【开源】使用PhenoCV-WeedCam进行更智能、更精确的杂草管理
    【C++历险记】国庆专辑---探索多态迷宫的代码之旅!
    latex 伪代码 algorithm2e方式
    HTML和CSS入门学习
    官宣|Apache Flink 1.16 发布公告
    基于ABP和Magicodes实现Excel导出操作
    go旧版依赖切换到新版
    计算机组成原理:最全的简单题集合
    JavaScript之观察者模式
  • 原文地址:https://blog.csdn.net/qq_53079406/article/details/125997386