为什么python输出不能正确保存

问题描述

我正在尝试保存实际上是用 os.system 编写的 python 代码输出

import os
os.system("sudo nmap -p5433 -P0 -oG - -sS 127.0.0.1 | \
    sed -n 's/.* \([0-9\.]\{7,\}\).*\/open\/.*/\1/p' > result.txt")

正如你在一行的末尾看到的,输出应该保存在“result.txt”中,我确定输出应该是一个 ip (127.0.0.1) 但输出是这样的: .filter

输出一个符号或类似的东西,有什么办法可以正确保存这段代码输出吗?

解决方法

如果我理解正确,您只想保存在 nmap 扫描中找到并且状态为 up 的主机?

如果是这样,您可以使用:

sudo nmap -p5433 -P0 -oG - -sS 127.0.0.1 | grep 'Up' | grep -oP '\d*\.\d*\.\d*\.\d* > result.txt'

你使用 nmap,然后你 grep 所有包含 Up 状态的行,然后你只 grep ip 地址并将它们放在文本文件中

如果您只想要扫描中返回的所有 ip、地址(没有状态检查),您可以简化:

sudo nmap -p5433 -P0 -oG - -sS 127.0.0.1 | grep -oP '\d*\.\d*\.\d*\.\d*' > result.txt

虽然如果 nmap 打印如下内容会有重复:

# Nmap 7.80 scan initiated Fri Dec 25 14:05:05 2020 as: nmap -p5433 -P0 -oG - -sS 127.0.0.1
Host: 127.0.0.1 (localhost) Status: Up
Host: 127.0.0.1 (localhost) Ports: 5433/closed/tcp//pyrrho///

因为有两行ip地址相同