微服务Docker

tls_config = docker.tls.TLSConfig(client_cert=ClientCert, ca_cert=CaCert, verify=True)
# 创建 Docker 客户端对象
client = docker.DockerClient(base_url=DockerClient, tls=tls_config)
def start(ip, scan_type):
    container = None
    ports = get_ports(scan_type)
    try:
        image_name = "ilyaglow/masscan"
        container_command = f"-p {ports} {ip} --rate=10000 --output-format json --output-filename /tmp/temp.json"
        data = ""
        # 运行容器
        container = client.containers.run(
            image_name,
            command=container_command,
            detach=True
        )
        container.wait()

        # 指定要复制的文件或目录路径
        container_file_path = "/tmp/temp.json"  # 替换为你想要复制的文件路径

        stream, _ = client.containers.get(container.id).get_archive(container_file_path)

        # 创建一个BytesIO对象来存储文件内容
        file_like_object = io.BytesIO()

        # 从生成器中读取数据并写入BytesIO对象
        for chunk in stream:
            file_like_object.write(chunk)

        # 回到BytesIO对象的起始位置,以便tarfile可以读取它
        file_like_object.seek(0)

        # 使用tarfile打开文件流
        with tarfile.open(fileobj=file_like_object, mode='r|') as tar:
            # 遍历归档文件中的每个成员
            for member in tar:
                # 如果成员是文件,则提取
                if member.isfile():
                    # 提取文件对象并读取其内容
                    file_obj = tar.extractfile(member)
                    if file_obj is not None:  # 确保不是空目录或类似的情况
                        content = file_obj.read()
                        data = content.decode()
        container.remove(force=True)
        if not data:
            return {}
        data = json.loads(data)
        result = {}
        for i in data:
            ip = i.get("ip")
            if ip not in list(result.keys()):
                result[ip] = []
            ports = i.get("ports", [])
            for port in ports:
                result[ip].append(port.get("port"))
        return result
    except:
        if container is not None:
            container.remove(force=True)
        return {}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值