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()
相关文章
|
10月前
|
安全 Python
告别 os.path 的繁琐:拥抱 Python 的 pathlib
告别 os.path 的繁琐:拥抱 Python 的 pathlib
595 6
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
590 14
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
467 19
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
3880 23
|
存储 弹性计算 运维
云端问道 7 期实践教学-使用操作系统智能助手 OS Copilot 轻松运维与编程
使用操作系统智能助手 OS Copilot 轻松运维与编程
384 14
|
弹性计算 人工智能 运维
新手训练营——使用操作系统智能助手OS Copilot轻松运维与编程
本文摘自阿里云操作系统团队的林演(林生)关于操作系统智能助手创新产品的分享,围绕“OS Copilot的高效运维与编程”展开,主要包括以下几方面的内容: 1. 行业痛点击及背景 2. 产品与架构 3. 典型应用场景 4. 实验及反馈渠道
471 1
|
人工智能 弹性计算 运维
云端问道7期方案教学-使用操作系统智能助手OS Copilot轻松运维与编程
本文介绍了阿里云基础软件团队推出的操作系统智能助手 OS Copilot,旨在解决 Linux 开发与运维中的痛点。OS Copilot 基于大模型和操作系统领域知识构建,支持自然语言问答、命令辅助执行、系统运维优化及代码生成等功能,极大降低了学习成本和工作量。文章详细阐述了其产品架构、典型应用场景以及实验反馈渠道,帮助用户更高效地进行系统管理和编程。目前该产品处于公测阶段,免费提供给阿里云 ECS 实例和 Alinux 3 系统用户使用。
338 1
|
JavaScript 前端开发 Python
python中的OS模块的基本使用
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。博客分享前端技术及全栈开发经验,持续更新中,期待您的关注和支持!🎉🎉🎉
344 0
|
算法 调度 UED
探索操作系统中的多线程编程
【8月更文挑战第78天】在数字世界的复杂迷宫中,操作系统扮演着至关重要的角色。本文旨在揭开操作系统中多线程编程的神秘面纱,引导读者理解其概念、实现及应用。通过深入浅出的方式,我们将探讨如何在程序设计中运用多线程,以及这一技术如何优化软件性能和提升用户体验。文章将结合具体代码示例,展示多线程在实际应用中的魔力。无论你是编程新手还是资深开发者,这篇文章都将为你提供新的视角和思考路径。
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
1576 0
Vanilla OS:下一代安全 Linux 发行版