Linux——優(yōu)雅地獲取telnet結果

前言

在Linux服務器中我們偶爾會需要用到telnet命令來幫助我們判斷當前服務器到其他服務器應用的網(wǎng)絡關系是否開通,交互式的telnet對于我們批量驗證網(wǎng)絡關系并不友好,因此本篇文章將分享一下怎么用腳本的方式來批量驗證telnet的結果。希望對各位讀者有所幫助

在開始之前,我們先簡單說一下telnet命令,telnet命令支持2種模式:會話模式命令模式,一般情況下我們使用telnet ip port連接到某個服務上面時就會進入到會話模式,此時我們可以通過命令和遠程的服務端進行交互。退出的時候使用ctrl+]退出會話模式(進入到命令模式),再輸入quit退出命令模式,此時才能完全退出telnet命令。
可以看到退出telnet命令略顯麻煩,下面我們來說一下如何快速的退出telnet命令,可以結合echo命令幫助我們完成。在連接成功/失敗后會自動斷開連接。

echo "" | telnet ip port

上面的命令雖然解決了快速退出telnet的需要,但還是不夠優(yōu)雅,因為這里還面臨1個問題:無法控制超時時間,我們可以結合timeout命令來設置一個超時時間,例如下面的例子

echo "" | timeout --signal 9 2 telnet 39.98.74.233 80
執(zhí)行結果

上面的腳本解決了處理連接超時的問題,但是結果輸出略顯冗余,我們還可以進一步用腳本做優(yōu)化,使用$?來接收命令的執(zhí)行,以下面的腳本為例,我們來簡單分析一下這個腳本的執(zhí)行流程。
① 定義需要掃描的ip和端口
② 使用timeout命令設置telnet命令的超時時間
③ 使用echo追加字符串來強制退出telnet
這里有個小細節(jié),我們在前面說過telnet退出第一次后會進入到命令模式,想要完整的退出的話需要額外輸入close或者quit命令,這里使用-e命令使echo具備解析轉義字符的能力,而\x1d\x0d分別對應16進制下的1d0d,對應ASCII中的空格鍵和回車鍵。從而讓我們可以同時退出telnet的兩種模式。
eval命令用于把一長串的命令當做一個整體命令來執(zhí)行,方便我們對輸出結果進行統(tǒng)一的重定向
⑤使用$?判斷telnet命令是否正常聯(lián)通,輸出我們想要的結果語句

PS:如果需要掃描很多組不同的IP和端口的話,建議可以再把下面的腳本優(yōu)化一下,抽一個函數(shù)出來處理。

#!/bin/bash

ipList=("10.10.10.10" "10.33.33.33")
portList=("80")

for ip in ${ipList[@]}
do
    for port in $portList
    do
        eval "echo -e '\x1dclose\x0d' | timeout --signal=9 2 telnet $ip $port" >/dev/null 2>&1
        if [ $? -ne 0 ]; then
            echo "connect $ip $port fail!"
        else
            echo "connect $ip $port success."
        fi
    done
done
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容