Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 反转许多值的grep没有一致的输出_Linux_Bash_Grep_Testssl.sh - Fatal编程技术网

Linux 反转许多值的grep没有一致的输出

Linux 反转许多值的grep没有一致的输出,linux,bash,grep,testssl.sh,Linux,Bash,Grep,Testssl.sh,我目前正在建立自动pentest报告。我设置的脚本执行TLS和其他安全检查,以查看应用程序在这些方面是否安全是或否。当前使用testssl.sh应用程序(可在此处找到:)执行这些检查。然后,我将结果输出到一个csv文件,并创建一个脚本,该脚本将对有问题的文件进行greps处理,并根据所发现的内容,他将提及错误或正确的内容。鉴于我已经执行了检查,并且所有的值都是正确的,我应用invert greps来表示,每当在文件中找不到值时,他就需要执行特定的操作 起初我以为我正在编写的脚本正在运行,但是,在

我目前正在建立自动pentest报告。我设置的脚本执行TLS和其他安全检查,以查看应用程序在这些方面是否安全是或否。当前使用testssl.sh应用程序(可在此处找到:)执行这些检查。然后,我将结果输出到一个csv文件,并创建一个脚本,该脚本将对有问题的文件进行greps处理,并根据所发现的内容,他将提及错误或正确的内容。鉴于我已经执行了检查,并且所有的值都是正确的,我应用invert greps来表示,每当在文件中找不到值时,他就需要执行特定的操作

起初我以为我正在编写的脚本正在运行,但是,在测试另一个站点时,生成的输出不正确。但是,应该提到缺少的东西,当我只反转grep一个术语而没有在大量需要检查的东西之间放置或声明时,它似乎起作用了

我尝试过各种grep类型以获得恒定的输出,但到目前为止运气不佳。到目前为止,我已经尝试了以下方法:

if grep -v -e "NULLciphersnoencryptionnotoffered" -e "AnonymousNULLCiphersnoauthenticationnotoffered" -e "ExportcipherswoADHNULLnotoffered" -e "LOW64BitDESencryptionwoexportnotoffered|" -e "Weak128BitciphersSEEDIDEARC24notoffered" -e "TripleDESCiphersMediumnotoffered" -e "HighencryptionAESCamellianoAEADoffered" -e "StrongencryptionAEADciphersoffered" ./resultaten/tls-cipher-suites-ng.csv; then
        echo 'This is wrong' >> ../CH-40-Scans.tex
else
    echo 'This is correct.' >> ../CH-40-Scans.tex
fi
我所看到的是,上述情况并未表明这是错误的,但这是正确的,而以下情况确实会触发:

if ! grep -q -i "ipv6enabled" ./resultaten/tls-vulnerabilities-new-def.csv; then
    echo '\item This is wrong.' >> ../CH-40-Scans.tex
fi
我已经用|变体替换了-e,但到目前为止,我还没有找到一种一致的工作方法(也尝试过像egrep这样的方法)。还有别的办法让它工作吗?我不介意使用Java或PHP之类的东西来实现这一点,所以如果需要这些东西来创建一致的东西,那就好了


我很乐意听到任何我可以尝试得到一个可靠的工作补丁的消息。

这很有效,可以作为一个例子(注意,我已经注释掉了重定向到/dev/null)


我不知道你想做什么,但试试这些:

if awk '/NULLciphersnoencryptionnotoffered/ || \
       /AnonymousNULLCiphersnoauthenticationnotoffered/ || \
       /StrongencryptionAEADciphersoffered/ { f=1; exit }
       END { exit !f }' ./resultaten/tls-cipher-suites-ng.csv; then
    echo 'Present'
else
    echo 'Absent'
fi

if awk -v RS='^$' '/NULLciphersnoencryptionnotoffered/ && \
       /AnonymousNULLCiphersnoauthenticationnotoffered/ && \
       /StrongencryptionAEADciphersoffered/ { f=1 }
       END { exit !f }' ./resultaten/tls-cipher-suites-ng.csv; then
    echo 'Present'
else
    echo 'Absent'
fi

如果存在任何“字符串”,第一个将退出成功,如果所有“字符串”都存在,第二个将退出成功。第二个需要GNU awk用于多字符RS。

中有一个管道符号“LOW64BitDESencryptionwoexportnotoffered”
;我想这是故意的?我错过了一些东西,只是把它删除了,但仍然有问题。在使用上述类似内容时,其他脚本中也存在问题。第一个grep表达式也应具有-q。添加了-q,但遗憾的是,这没有产生任何影响。将输出发送到/dev/null:
grep…>/dev/null
。感谢您的代码。给它一个旋转,但我注意到,每当一个项目是真实的,真实的陈述。然而,我们希望它反过来。只要在文件中找到了所有内容,就应该是真的。每当它发现一个不符合要求的值时,就会生成一个false。这正是我的示例所做的。顺便说一句。你应该在你的评论中明确:“只要一项是真的”是一个不清楚的陈述,特别是在当前的上下文中。你的评论似乎自相矛盾。请在你的问题上加上一个“grep”的标签。我很抱歉,试图让它尽可能清楚,希望你现在明白我的意思,如果不明白,请告诉我。
if awk '/NULLciphersnoencryptionnotoffered/ || \
       /AnonymousNULLCiphersnoauthenticationnotoffered/ || \
       /StrongencryptionAEADciphersoffered/ { f=1; exit }
       END { exit !f }' ./resultaten/tls-cipher-suites-ng.csv; then
    echo 'Present'
else
    echo 'Absent'
fi

if awk -v RS='^$' '/NULLciphersnoencryptionnotoffered/ && \
       /AnonymousNULLCiphersnoauthenticationnotoffered/ && \
       /StrongencryptionAEADciphersoffered/ { f=1 }
       END { exit !f }' ./resultaten/tls-cipher-suites-ng.csv; then
    echo 'Present'
else
    echo 'Absent'
fi