在實(shí)際運(yùn)維中,客戶會(huì)經(jīng)常要求協(xié)助測試某一地址和端口是否是聯(lián)通狀態(tài),但有時(shí)客戶反饋實(shí)際使用中有時(shí)是能訪問通,有時(shí)訪問不對(duì),于是,按客戶的要求,測試下來,發(fā)現(xiàn):
telnet結(jié)果是通的,但客戶反饋服務(wù)訪問此地址時(shí),很大概率還會(huì)出現(xiàn)超時(shí)的情況。基礎(chǔ)部門建議循環(huán)telnet看下,是不是不穩(wěn)定。

當(dāng)時(shí)是手動(dòng)多次重復(fù)執(zhí)行telnet命令,發(fā)現(xiàn)確實(shí)有部分telnet不通的情況。
telnet 測試方法
telnet 192.168.1.9 443
批量telnet腳本
以下為通過腳本形式,實(shí)現(xiàn)批量telnet的方法:
192.168.1.9節(jié)點(diǎn)的tmp目錄下新建過cheng文件夾。
循環(huán)telnet,shell腳本如下:
# ====================腳本開始============
PORT=XXXX
count=0
for i in $(cat ip_list.txt)
do
((count++))
echo "count=$count"
# 關(guān)鍵代碼,1s自動(dòng)結(jié)束telnet
(sleep 1;) | telnet $i $PORT >>telnet_result.txt
done
# 根據(jù)結(jié)果判斷出正??梢詐ing通的ip
cat telnet_result.txt | grep -B 1 ] | grep [0-9] | awk '' | cut -d '.' -f 1,2,3,4 >telnet_alive.txt
# 差集,得到ping不同的ip
cat ip_list.txt telnet_alive.txt | sort | uniq -u >telnet_die.txt
# ====================腳本結(jié)束==================
執(zhí)行步驟:
1、在Linux環(huán)境中運(yùn)行,首先建文件夾如cheng(mkdir cheng),然后vim創(chuàng)建telnet.sh(vi telnet.sh)文件將上述代碼復(fù)制進(jìn)去,修改XXXX為實(shí)際端口號(hào)例如linux的遠(yuǎn)程端口22,保存退出。
2、在cheng文件夾中創(chuàng)建ip_list.txt(vim ip_list.txt)的文件,并輸入要檢查的服務(wù)器IP地址,每行一個(gè)地址。

3、執(zhí)行telnet.sh(sh telnet.sh 或 bash telnet.sh)文件,等待結(jié)果。
4、cheng文件夾目錄文件介紹
shell文件夾中會(huì)新出現(xiàn)3個(gè)新的文件,如下:
telnet_alive.txt#端口通的地址集合
telnet_die.txt#端口不通的地址集合
telnet_result.txt#所有地址檢查結(jié)果
5、查看腳本執(zhí)行結(jié)果,一般我們查看telnet_alive.txt文件即可。
腳本執(zhí)行時(shí),可能會(huì)報(bào)錯(cuò):syntax error near unexpected token `

報(bào)銷是因?yàn)槲以趙indows7里寫的shell腳本,傳到CentOS系統(tǒng)里運(yùn)行就可以會(huì)提示syntax error near unexpected token `錯(cuò)誤,是因?yàn)閮蓚€(gè)系統(tǒng)的換行符不一樣導(dǎo)致的。
需要使用notepad++轉(zhuǎn)換下格式,轉(zhuǎn)換方法
1、把腳本使用notepad++打開,點(diǎn)擊“視圖”->“顯示符號(hào)”->顯示所有字符,將所有字符顯示出來,調(diào)整完成就會(huì)發(fā)現(xiàn)文檔中出現(xiàn)CR LF,表示換行回車符

2、接下來,點(diǎn)擊“編輯”->“檔案格式轉(zhuǎn)換”->“轉(zhuǎn)換為UNIX格式”,目的是將windows的格式轉(zhuǎn)為linux或unix格式

3、轉(zhuǎn)換完成,換行回車符自動(dòng)變成【LF】,這里再上傳到服務(wù)上就可以了。
以上方式是固定端口。要telnet多個(gè)不同端口的話腳本需要修改一下,去掉上面腳本的Port部分,并改用while read line循環(huán):
Shell腳本for和while的區(qū)別,for是按行讀取,但如果行內(nèi)文字有空格或tab等,則分開讀取,即一次讀取一個(gè)字符串。
如m.z1146.cn 80,就會(huì)變成兩行了,m.z1146.cn一行, 80一行。telnet就會(huì)執(zhí)行不下去。
While是整行讀取,不管行內(nèi)有多少段文字。
另外ip_list.txt需要改為ip + 端口

腳本如下:
count=0
cat ip_list.txt|while read line
do
((count++))
echo "count=$count"
echo "$line"
# 關(guān)鍵代碼,1s自動(dòng)結(jié)束telnet
(sleep 1;) | telnet $line >>telnet_result.txt
done
# 根據(jù)結(jié)果判斷出正常可以ping通的ip
cat telnet_result.txt | grep -B 1 ] | grep [0-9] | awk '' | cut -d '.' -f 1,2,3,4 >telnet_alive.txt
# 差集,得到ping不同的ip
cat ip_list.txt telnet_alive.txt | sort | uniq -u >telnet_die.txt
但這個(gè)多端口的方式,生成的telnet_alive.txt始終為空,telnet_die.txt也有不對(duì)的情況出現(xiàn)(比如m.z1146.cn 80實(shí)際是通的,卻出現(xiàn)在telnet_die.txt里)??赡苁莍p_list.txt加了端口,相應(yīng)的判斷也需要改下。也可能是sleep 1時(shí)間不夠長,前一個(gè)地址超時(shí)等待的時(shí)候,下一個(gè)地址又開始telnet,造成統(tǒng)計(jì)結(jié)果不準(zhǔn)確。
其實(shí)從sh telnet.sh的執(zhí)行結(jié)果上就能看出通不通了,下圖報(bào)timed out的就是不通的。

使用nc命令判斷端口情況
在Linux中有如下一條語句,也可以檢驗(yàn)端口是否通
nc -zv origin-creation.com 443
沒有nc的服務(wù)器,需要 yum install -y nc 安裝一下。
這個(gè)命令不像telnet,需要手動(dòng)退出才能執(zhí)行下一個(gè)命令。可以使用此方法,手動(dòng)多次重復(fù)執(zhí)行,判斷是否有不通的情況。

在Docker容器里也可以安裝nc命令,安裝命令:
apk add nc?
安裝之后可以在docker容器里,測試端口情況。
使用CURL命令判斷端口情況
除telnet、nc之后,還可以通過curl來判斷端口是否通,語句如下:
curl origin-creation.com:443 #注意地址和端口間的冒號(hào)“:”,一定不要落下
使用curl命令,相當(dāng)于使用瀏覽器訪問或使用postman等接口調(diào)用工具返回,返回只要不是timeout,基本均不通的狀態(tài),返回內(nèi)容取決于端口返回內(nèi)容

批量curl,循環(huán)curl腳本
在服務(wù)器任意位置創(chuàng)建文件,建議使用root用戶,避免權(quán)限問題
vim forcurl
#!/bin/bash
for i in {1..1000}
do
echo '第一個(gè)IP: 192.168.1.9 8000端口,第' $i '次訪問.........,'
time curl '192.168.1.9:8000'
echo '第二個(gè)IP: 10.11.12.100 8000端口,第' $i '次訪問.........'
time curl '10.11.12.100:32767 '
echo '如果有多個(gè)ip,可以繼續(xù)按照上邊,繼續(xù)寫下去,腳本里不限制。。。。。'
echo '======用于區(qū)分次數(shù)============='
done
以上腳本是循環(huán)1000次,測試兩個(gè)ip和端口的暢通性,每次均記錄次數(shù)和訪問結(jié)果,可自動(dòng)調(diào)整次數(shù),調(diào)整方法,將 for i in {1..1000}中的1000,換成對(duì)應(yīng)次數(shù)即可。
腳本編寫完成后,按esc鍵,再按“冒號(hào)wq”,保存退出。
使用以下命令執(zhí)行并查看結(jié)果:
sh forcurl
以上即為Linux系統(tǒng)常見的檢測端口暢通情況~
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至2705686032@qq.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。原文轉(zhuǎn)載: 原文出處: