2016-09-07 3 views
0

У меня есть список IP-адресов, которые мне нужны, чтобы проверить, поддерживают ли они TLS1.2, и я использую Openssl для этого. Однако я не могу автоматизировать процесс в сценарии Bash. Он выполняется только на первом IP-адресе и ждет ввода. Я читал, что мне нужно либо добавить < /dev/null, либо echo "x", но это не поможет. Я пробовал:Выполнение openssl с использованием bash for loop

for i in `cat scope`; do openssl s_client -tls1_2 -connect $i:443 < /dev/null; done 

или:

for i in `cat scope`; do echo "x" | openssl s_client -tls1_2 -connect $i:443 < /dev/null; done 

EDIT: решена, порт 443 не был открыт на 2-й IP, поэтому он ждет.

+0

Можете ли вы попробовать запустить это вручную для одного IP-адреса и вставить терминал ввода/вывода? – anishsane

+0

@anishsane, если я запускаю на 1 IP, без цикла, он дает мне вывод и заканчивается нормально, и я возвращаю свой запрос: 'openssl s_client -tls1_2 -connect $ (head -1 scope): 443 ChildinTime

+0

ОК, есть ли ошибки во второй строке? возможно, конечные пробелы или любой особый символ и т. д.? Кроме того, он запускается вручную для 2-й строки ('openssl s_client -tls1_2 -connect $ (sed -n 2p scope): 443 anishsane

ответ

0

Я бы посоветовал использовать nmap вместо s_client для проверки рукопожатия TLS (и он поймает случай, когда порт не открыт).

for i in `cat scope`; do 
    if nmap --script ssl-enum-ciphers -p 443 "$i" | grep "TLSv1.2" >/dev/null; then 
    echo "$i supports TLSv1.2" 
    else 
    echo "$i doesn't support TLSv1.2" 
    fi 
done 
+0

Действительно, это лучше :) – ChildinTime

Смежные вопросы