Python编程--sys模块及OS模块简单用例

简介: Python编程--sys模块及OS模块简单用例

Python编程–sys模块及OS模块简单用例
sys模块
内置的sys模块使我们能访问到由Python解释器使用或维护的对象,其中包括标志、版本、整型数的最大尺寸、可用的模块、hook路径、标准错误/输入/输出的位置,以及调用解释器的命令行参数。比如,我们或许想要在运行时解析命令行参数。比如,漏洞扫描器:如果我们想把一个文本文件的文件名作为命令参数传递进来该怎么办?sys.argv列表中含有所有的命令行参数。第一个sys.argv[0]元素中的是Python脚本名称,列表中的其余参数则记录了之后所有的命令行参数。如果我们只传递一个额外的参数,sys.argv中应该包含两个元素,也就是sys.argv列表的长度为2。

import sys
if len(sys.argv) == 2:
  filename = sys.argv[1]
  print(f"[+] Reading Vulnerabilities From: {filename}" )

运行这段代码,我们看到代码成功地解析了命令行参数,如下图所示:
image.png

OS模块
内置的OS模块提供了丰富的适用于Mac、NT或Posix的操作系统的函数。这个模块允许程序独立地与操作系统环境、文件系统、用户数据库以及权限进行交互。上面的例子中,把一个文本文件名(vuln-banners.txt)作为参数传递进来,先检查一下该文件是否存在、当前用户是否有权限读取该文件,或许很有价值。如果其中任一条件不满足,就向用户显示一条相应的错误信息是很有帮助的。示例代码如下:

import os, sys
if len(sys.argv) == 2:    # 只传递一个文件名参数
    filename = sys.argv[1]   # 获取文件名,并赋值给filename
    if not os.path.isfile(filename):         # 判断文件是否存在
        print(f'[-] {filename} does not exist.')
        exit(0)
    if not os.access(filename, os.R_OK):          # 判断文件是否有访问权限
        print(f'[-] {filename} access denied.')
        exit(0)

    print(f'[+] Reading Vulnerables From: {filename}')

为验证代码,先尝试读取一个不存在的文件,脚本提示错误信息后,创建一个特定的文件名并成功读取其中的内容。最后,限制权限,脚本则正确地提示拒绝访问(access-denied)

+] Reading Vulnerablities From: vuln-banners.txt
(base) liuxiaowei@MacBook-Air hacker_python % python test.py vuln-banne.txt  
[-] vuln-banne.txt does not exist.
(base) liuxiaowei@MacBook-Air hacker_python % python test.py vuln-banners.txt
[+] Reading Vulnerables From: vuln-banners.txt
(base) liuxiaowei@MacBook-Air hacker_python % python test.py vuln-banners.txt 
[-] vuln-banners.txt access denied.

现在整合这两个模块的应用,示例代码如下:

import socket
import os
import sys

# 定义返回banner函数,参数为(ip,port)
def retBanner(ip, port):
    try:
        socket.setdefaulttimeout(2)
        s = socket.socket()
        s.connect((ip, port))
        banner = s.recv(1024)
        return banner

    except:
        return

# 定义测试漏洞函数,参数为banner,filename
def checkVulns(banner, filename):
    with open(filename, 'r') as f:
        for line in f.readlines():
            if line.strip('\r\n') in banner:
                print(f'[+] Server is vulnerable: {banner.strip("\n")}')


def main():
    if len(sys.argv) == 2:
        filename = sys.argv[1]
        if not os.path.isfile(filename):
            print(f'[-] {filename} does not exist.')
            exit(0)

        if not os.access(filename, os.R_OK):
            print(f'[-] {filename} access denied.')
            exit(0)

    else:
        print('[-] Usage: ' + str(sys.argv[0]) + ' <vuln filename>')
        exit(0)

        portLst = [21, 22, 25, 80, 110, 443]
        for i in range(147, 150):
            ip = '192.168.31.' + str(i)
            for port in portLst:
                banner = retBanner((ip, port))
                if banner:
                    print('[+] '+ ip + ': ' + banner)
                    checkVulns(banner, filename)

if __name__ == '__main__':
    main()
相关文章
|
1天前
|
存储 数据可视化 Python
Python编程中的数据可视化技术
在数据驱动的世界中,将复杂的数据集转换为易于理解的视觉表示形式至关重要。本文将深入探讨如何使用Python进行数据可视化,包括选择合适的库、处理数据和设计有效的图表。我们将一起学习如何让数据讲故事,并确保你的信息传达清晰且有影响力。
|
1天前
|
网络协议 IDE iOS开发
Python编程---简单的聊天工具
Python编程---简单的聊天工具
11 2
|
1天前
|
小程序 IDE 开发工具
Python编程--个人信息修改小程序
Python编程--个人信息修改小程序
10 2
|
1天前
|
IDE 开发工具 Python
Python扑克游戏编程---摸大点
Python扑克游戏编程---摸大点
|
1天前
|
Python
Python编程--解压缩文件
Python编程--解压缩文件
|
1天前
|
IDE 开发工具 数据安全/隐私保护
Python编程--实现用户注册信息写入excel文件
Python编程--实现用户注册信息写入excel文件
|
1天前
|
Python
Python编程---双色球选购程序
Python编程---双色球选购程序
|
1天前
|
存储 Python Perl
Python编程--正则基础(一)
Python编程--正则基础(一)
|
1天前
|
存储 安全 网络安全
Python编程--使用PyPDF解析PDF文件中的元数据
Python编程--使用PyPDF解析PDF文件中的元数据
|
1天前
|
Python
Python编程--使用NMAP端口扫描
Python编程--使用NMAP端口扫描