指令碼實現telnet檢測指定機器埠的連通性
# shell script: checklink.sh
# function: auto check the link of server IP and PORT
# date: 2016.04.07
# modify: 2016.04.07
# copyright by Li Jian.
#根據系統型別的不同,載入系統環境變數
if [ `uname` = "Linux" ]
then
PROFILE=.bash_profile
else
PROFILE=.profile
fi
. $HOME/$PROFILE#在指令碼執行目錄下建立日誌檔案 .log 和檢測的最終結果檔案.dat
resultfile=$PWD/checklink.dat
log_file=$PWD/checklink.log
#判斷指令碼執行的時候傳遞的引數個數是否正確,包括ip地址和埠號port兩個引數
if [ $# -ne 2 ]
then
echo `date +"%Y.%m.%d %T"`"the parameter numbers are not correct,exit!" >>${log_file}
exit
fi
#讀取傳遞的指令碼引數
IP=$1
port=$2
#判斷兩個引數是否為空
if [ -z $IP -o -z $port ]
then
echo `date +"%Y.%m.%d %T"`"the parameter should not be null,exit!" >>${log_file}
exit
fi
#通過Ping命令先檢測指定的ip地址是否能連通,通過ping命令傳送四個包(可以是傳送另外的數量),限制超時時間為3秒鐘(也可以是其他值,具體要看能忍受多長時間的延遲),主要根據丟包的比例來決定該ip地址是否能連通,比如ping 百度返回id結果如下:
[email protected]:~/lijian$ ping www.baidu.com -c 4 -w 3
PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.
64 bytes from 180.97.33.108: icmp_seq=1 ttl=128 time=3.79 ms
64 bytes from 180.97.33.108: icmp_seq=2 ttl=128 time=5.32 ms
64 bytes from 180.97.33.108: icmp_seq=3 ttl=128 time=3.92 ms
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
#RATE=`ping -c 4 -w 3 $IP | grep 'packet loss' | grep -v grep | cut -f3 -d, | cut -f1 -d%`
if [ $RATE -eq 100 ] #這個值具體可以設定成75、50等等,這裡設定成包全丟的情況下為不通
then
echo `date +"%Y.%m.%d %T"`" ping the $IP is not connected, FAILURE" >${log_file}
echo "FAILURE" #全丟了說明該IP地址不通
else
telnet $IP $port<<@@@ 2>${resultfile} 1>&2 #否則telnet命令檢測指定埠號PORT是否連通,如果可以連通,則立馬quit退出連線,將連線結果和錯誤資訊等都寫入到結果檔案中
quit
@@@
RESULT=`cat ${resultfile} 2>/dev/null | grep "Connection closed by foreign host" | wc -l` #匹配看結果檔案中手否有這句話
echo `date +"%Y.%m.%d %T"`"the result of telnet is $RESULT" >${log_file}
if [ $RESULT -eq 1 ]
then
echo `date +"%Y.%m.%d %T"`" telnet the $IP and $port SUCCESS" >>${log_file} #如果有的話就說明該埠是通的,返回結果字串SUCCESS到檔案並同時列印大螢幕上
echo "SUCCESS"
else
echo `date +"%Y.%m.%d %T"`" telnet the $IP and $port FAILURE" >>${log_file} #否則就說明該埠是不通的,列印FAILURE
echo "FAILURE"
fi
fi
rm -f ${resultfile} #刪除結果檔案,日誌檔案保留
以上就是指令碼檔案 checklink.sh,用於自動的檢測指定機器埠的連通性。
執行的時候先賦予指令碼執行許可權:
chmod +x checklnk.sh
然後執行指令碼並傳遞兩個引數:第一個IP地址,第二個埠號,比如:
./checklink.sh 192.168.25.67 21
疑問:這裡為何不直接呼叫telnet命令來檢測指定IP地址和埠號,而需要先呼叫ping命令,再呼叫telnet命令呢?
解答:對於telnet命令,當傳遞的ip地址不同的時候,就會陷入長時間的等待中,因為telnet不可設定超時時間,所以需要先通過ping命令篩除掉那些IP地址不通的IP,再通過telnet判斷指定的埠,若是埠不通的話telnet會立刻返回的,如果短靠譜是可以連通,則立即quit退出telnet登陸,根據返回結果判斷是否連通。
這裡還有一篇很好的帖子,通過C語言程式來設定和控制telnet 的返回超時時間的,很經典
http://bbs.csdn.net/topics/340269286
相關推薦
指令碼實現telnet檢測指定機器埠的連通性
#!/bin/ksh # shell script: checklink.sh # function: auto check the link of server IP and PORT # date: 2016.04.07 # modify: 2016.04.07 #
Linux環境測試機器埠連通性
生產中,有很大一部分的問題都是由於不同機器間網路不同導致的,那麼如何判斷兩臺機器之間的連通性?本文介紹幾種常見的方式: telnet方法 wget方法 ssh方法 curl方法 1. telnet方法 格式:telnet ip port 說明:i
Flume實戰一,Flume配合telnet從指定網路埠採集資料輸出到控制檯
1、使用Flume的關鍵就是寫配置檔案 1)配置Source 2)配置Channel 3)配置Sinks 4)將以上三種元件串聯起來 在cd $FLUME_HOME/conf vim example.conf #example.conf內容 # a1可以看做是f
telnet檢視遠端機器埠是否可以訪問
導讀 今天在Linux下面用tomcat部署了web應用,看日誌什麼的都沒有問題,但在windows下面就是不能訪問。 最後推測是Linux的沒有把tomcat的8080埠對外開放 windows
Linux和Windows下的NC(Netcat)命令測試埠連通性
一、Linux OS 環境下(以Centos為例),使用nc命令分別測試TCP和UDP埠連通性: 安裝方法: 在客戶端和伺服器端分別安裝nc工具,安裝命令如下: yum install nc 1 1. Linux OS下使用nc命令,實現TCP方式監聽伺服器端5000
使用 PsPing & PaPing 進行 TCP 埠連通性測試
PsPing & PaPing 介紹 通常,我們測試資料包能否通過 IP 協議到達特定主機時,都習慣使用 ping 命令。工作時 ping 向目標主機發送一個 IMCP Echo 請求的資料包,並等待接收 Echo 響應資料包,通過響應時間和成功響應的次數來估算丟包率和網路時延。但是在 Azure
使用telnet測試指定埠的連通性
大家好,我是良許。 大家知道,`telnet` 是一個閹割版的 `ssh` ,它資料不加密,資料容易被盜竊,也容易受中間人攻擊,所以預設情況下 telnet 埠是必須要被關閉的。 telnet為使用者提供了在本地計算機上完成遠端主機工作的能力,因此可以通過telnet來測試埠的連通性。 #### 確認遠
利用主機埠轉發實現對QEMU虛擬機器的訪問
作 者:郝慶豐 領 域:QEMU 適宜讀者:QEMU及虛擬化相關開發人員 背景知識:虛擬化基礎知識,QEMU基礎知識 正文: 利用主機埠轉發實現對QEMU虛擬機器的訪問 命令 選項:hostfwd 詳細描述:hostfwd=[t
netty自定義訊息實現心跳檢測與重連
其實客戶端心跳傳送用到的是IdleStateHandler,詳細看程式碼你就會明白為什麼。 //處理空閒狀態事件的處理器 pipeline.addLast(new IdleStateHandler(6,7,8, TimeUnit.SECONDS)); 在IdleSt
基於SSH埠轉發實現telnet的安全傳輸
學過一點Linux的人看到這題目,可能就感覺有點白痴。確實,SSH的一大功能就是加密的遠端登入,何必多此一舉。 在此,不得不先宣告,本文的重點是實現SSH安全埠轉發的功能。熟悉SSH的人都知道,埠轉發也是SSH的一大功能。此功能可以加密非安全的TCP連線,如:FTP,IMAP,HTTP等協議。之所以選
Python學習13_Python指令碼實現查詢指定目錄下包含指定關鍵字的檔案
#!/usr/bin/python # coding:utf8 import os # 判斷檔案中是否包含關鍵字,是則將檔案路徑打印出來 def is_file_contain_word(file_list, query_word): for _file in
linux下用telnet檢測遠端埠是否開啟
方法一. 常用telnet 118.10.6.128 88方式測試遠端主機埠是否開啟。 方法二. nmap ip -p port 測試埠 nmap ip 顯示全部開啟的埠 根據顯示close/open確定埠是否開啟。 方法三. nc -
Python實現Telnet自動連線檢測密碼
最近在學習Python網路相關程式設計,這個程式碼實現了Telnet自動連線檢測root使用者密碼,密碼取自密碼本,一個一個檢測密碼是否匹配,直到匹配成功,螢幕輸出停止。 程式碼如下: #encoding=utf-8 import telnetlib import tim
Python指令碼實現查詢指定目錄下包含指定關鍵字的檔案
#!/usr/bin/python # coding:utf8 import os # 判斷檔案中是否包含關鍵字,是則將檔案路徑打印出來 def is_file_contain_word(file
利用telnet命令檢測遠端主機埠是否正常開放
安裝telnet。我的win7下就沒有telnet,在cmd下輸入telnet提示沒有該命令。於是我們進入控制面板---->程式---->開啟或關閉windows功能。然後等一段時間,在出來的對話方塊把telnet客戶端和telnet伺服器勾選上,其他的不用管,
python實現指定ip埠掃描
在Linux中判斷一臺主機是否可達,可以使用ping命令,而判斷埠是否開啟,可以使用telnet命令,但是telnet命令沒有超時時間的引數,使用起來不是很方便,那麼可以利用Python來完成一個埠掃描的功能 socket實現埠掃描 #!/usr/bin
在iterm中用expect指令碼實現ssh, telnet對aix, linux的自動登入
在mac上轉戰iterm以後,才知道自動登入的內部原理,原來可以用expect指令碼做和伺服器的自動互動,當然自動登入只是其中的一小部分功能啦 ssh自動登入: #!/usr/bin/expect
高可用服務之Keepalived利用指令碼實現服務的可用性檢測
上一篇部落格主要聊到了keepalived高可用LVS叢集的相關配置,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13659428.html;keepalived高可用LVS叢集是Keepalived的設計之初的功能,所以它高可用LVS叢集內建了對LVS的RS的健
輕松Angularjs實現表格按指定列排序
filter click arc 我們 點擊 ont 想要 log ner angular表格點擊序號進行升序,再次點擊進行降序排序,在輸入框輸入信息,出現相對應數據的那一行。 html: <input type="text" ng-model="se
簡單馬爾可夫模型的實現(簡單的機器學習)
自然語言 index 馬爾科夫 ref item model not 次數 read 馬爾可夫模型(Markov Model)是一種統計模型,廣泛應用在語音識別,詞性自動標註,音字轉換,概率文法等各個自然語言處理等應用領域。經過長期發展,尤其是在語音識別中的成功應用,使它成