Скрипт командной строки telnet для Linux - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь прочитать несколько хостов и портов из текстового файла (ip.txt) и проверить, подключены ли они / не удалось подключиться / истекло время ожидания, и отображает ответы на Telnet_Success.txt / Telnet_Failure.txt / Telnet_Refused TXT-файлы

Я пробовал следующий сценарий, он просто показывает все результаты подключения как неудачные, но при проверке вручную по одному я обнаружил, что некоторые из них подключены. любая помощь приветствуется. Вот скрипт:

>Telnet_Success.txt
>Telnet_Refused.txt
>Telnet_Failure.txt
file=ip.txt
while read line ; do
  ip=$( echo "$line" |cut -d ' ' -f1 )
  port=$( echo "$line" |cut -d ' ' -f2 )
  if telnet -c $ip $port </dev/null 2>&1 | grep -q Escape; then
  echo "$ip $port Connected" >> Telnet_Success.txt
  elif telnet -c $ip $port </dev/null 2>&1 | grep -q refused; then
  echo "$ip $port Refused" >> Telnet_Refused.txt
  else
  echo "$ip $port Failed" >> Telnet_Failure.txt
  fi
 done < ${file}

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Я не могу точно сказать вам, что происходит из-за предоставленной вами диагностики, но определенно проблема заключается в том, что вы пытаетесь вызвать telnet несколько раз - вы можете получать разные результаты каждый раз, вызывая ошибки, которые трудно устранить. , У вас также есть некоторые стилистические проблемы в вашем коде.

Попробуйте этот рефакторинг; см. встроенные комментарии.

>Telnet_Success.txt
>Telnet_Refused.txt
>Telnet_Failure.txt
# Why use a variable for something you only reference once anyway?
file=ip.txt
# Use the shell's field splitting facility
# Cope with missing final newline; see
# https://mywiki.wooledge.org/BashFAQ/001#My_text_files_are_broken.21__They_lack_their_final_newlines.21
while read -r ip port _ || [[ -n $port ]]; do
  # Run telnet once, capture result for analysis 
  output=$(telnet -c "$ip" "$port" </dev/null 2>&1)
  case $output in
    *Escape*)
        echo "$ip $port Connected" >> Telnet_Success.txt;;
  *refused*)
        echo "$ip $port Refused" >> Telnet_Refused.txt;;
  *)
        echo "$ip $port Failed" >> Telnet_Failure.txt;;
  esac
# Always double quote file name variables, just in case
done < "${file}"
0 голосов
/ 21 мая 2019

Привет похоже, что команда telnet является виновником должно быть "telnet ip port", а не "telnet -c ip port"

file=ip.txt
while read line
do
  ip=$( echo "$line" |cut -d ' ' -f1 )
  port=$( echo "$line" |cut -d ' ' -f2 )
  if  telnet  $ip $port </dev/null 2>&1 | grep -q Escape 
  then  
    echo "$ip $port Connected" >> Telnet_Success.txt
  elif  telnet  $ip $port </dev/null 2>&1 | grep -q refused 
  then
    echo "$ip $port Refused" >> Telnet_Refused.txt
  else
    echo "$ip $port Failed" >> Telnet_Failure.txt
  fi
done < ${file}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...