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 {}
微服务Docker
最新推荐文章于 2024-06-13 15:33:19 发布