1. 程式人生 > >linux機器上執行ping命令的java方法

linux機器上執行ping命令的java方法

在編寫網管系統的過程中,經常需要判斷某臺機器是否可用,於是採用使用ping機器的方法判斷該機器當前是否可用,方法如下:

/**

 * @Title: execPingCommand

 * @Description: 執行ping命令,檢視裝置是否可用

 * @param @param deviceIp

 * @return boolean true-能ping通,false-不能ping通

 * @throws

*/

public static boolean execPingCommand(String deviceIp) {


logger.debug("enter VolumeManage.execPingCommand(String deviceIp)");


boolean networkUseable = false;


// String address="www.javawind.net";


Process process = null;


try {



process = Runtime.getRuntime().exec("ping -c 3"+ deviceIp);


} catch (IOException e1) {



logger.error("System error:", e1);


}


InputStreamReader r = new InputStreamReader(process.getInputStream());


LineNumberReader returnData = new LineNumberReader(r);



String returnMsg ="";


String line ="";


try {



while ((line = returnData.readLine()) != null) {




// System.out.println(line);




returnMsg += line;



}




if (returnMsg.indexOf("Unreachable") != -1





|| returnMsg.indexOf("100% packet loss") != -1) {




networkUseable = false;



} else {




networkUseable = true;



}


} catch (IOException e) {



logger.error("System error:", e);


} finally {



if (returnData != null) {




try {





returnData.close();





} catch (IOException e) {





// TODO Auto-generated catch block





logger.error("System error:", e);




}



}



if (r != null) {




try {





r.close();




} catch (IOException e) {





// TODO Auto-generated catch block





logger.error("System error:", e);




}



}


}


logger.debug("exit VolumeManage.execPingCommand(String deviceIp)"




+"[networkUseable] ="+ networkUseable);


return networkUseable;

}

 此方法關鍵命令為紅色部分:ping -c 3 + ip;這個命令為linux系統所有,windows上不能執行,表示方法執行之後,只需要返回3行響應訊息便可,不然在linux中,如果不終止該命令,會不停的列印響應的訊息。

ping通機器的響應訊息如下:

[[email protected] ~]# ping -c 3 192.168.3.51PING 192.168.3.51 (192.168.3.51) 56(84) bytes of data.64 bytes from 192.168.3.51: icmp_seq=1 ttl=64 time=14.6 ms64 bytes from 192.168.3.51: icmp_seq=2 ttl=64 time=0.332 ms64 bytes from 192.168.3.51: icmp_seq=3 ttl=64 time=0.359 ms

--- 192.168.3.51 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2000msrtt min/avg/max/mdev = 0.332/5.103/14.619/6.728 ms[[email protected] ~]#

ping不同的機器的響應訊息如下:

[[email protected] ~]# ping -c 3 192.168.3.52PING 192.168.3.52 (192.168.3.52) 56(84) bytes of data.From 192.168.7.181 icmp_seq=1 Destination Host Unreachable

From 192.168.7.181 icmp_seq=2 Destination Host UnreachableFrom 192.168.7.181 icmp_seq=3 Destination Host Unreachable

--- 192.168.3.52 ping statistics ---3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2000ms, pipe 3[[email protected] ~]#

因此,方法根據這兩個條件進行判斷,如果含有Unreachable或者100% packet loss就表示機器ping不同,不可用,否則為可用。

相關推薦

linux機器執行ping命令java方法

在編寫網管系統的過程中,經常需要判斷某臺機器是否可用,於是採用使用ping機器的方法判斷該機器當前是否可用,方法如下: /** * @Title: execPingCommand * @Description: 執行ping命令,檢視裝置是否可用 * @param @param deviceIp

在多臺Linux機器執行命令

Linux伺服器的管理員經常需要在多臺機器上執行相同的命令。我不是Linux管理員,可以今天就接了個活,檢查線上N臺機器的儲存是否都正確掛載了。N臺機器一個一個ssh登入上去,然後mount人肉看一下,也許30分鐘就搞定了。可是我是工程師,不能用這麼“土”的方式解決。網上搜

Linux C 程式執行 shell 命令並獲取返回結果的方法

據說有統計資料表明,程式碼的缺陷率是一定的,與所使用的語言無關。Linux提供了很多的實用工具和指令碼,在程式中呼叫工具和指令碼,無疑可以簡化程式,從而降低程式碼的缺陷數目。Linux shell 指令碼也是一個強大的工具,我們可以根據需要編制指

Linux系統下python程式碼執行shell命令方法

方法一:os.popen #!/usr/bin/python # -*- coding: UTF-8 -*- import os, sys # 使用 mkdir 命令 a = 'ls' b = os.popen(a,'w',1) print b 方法二:os.system #!/

java程式在eclipse執行報錯解決方法:Exception in thread "main" java.lang.NoClassDefFoundError:

最近在Linux上的eclipse中執行java程式出現了這樣的錯誤,弄了很久用了以下三種方法終後終於成功運行了,分享下,希望能幫助到大家。 Linux執行java程式提示錯誤: Exception in thread "main" java.lang.NoClassDefFoundEr

eclipse匯出java程式並且移到linux系統執行

解決問題:1 匯出java可執行jar包,並且執行。 2 解決想通過java開發小工具,糾結半天不知道怎麼把它弄到linux上面執行的問題 其實這篇文章沒有什麼很大意義,對開發老手來說不屑一顧。但是相信還是有很多跟我一樣的人,遇到同樣的問題。 貼

Docker在Windows執行NetCore系列(一)使用命令控制檯執行.NetCore控制檯應用 Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Windows上執行NetCore系列(一)使用命令控制檯執行.NetCore控制檯應用   系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章作業系統資訊     

java web專案釋出到linux伺服器執行出現亂碼

我們專案的開發是在windows下完成的。然後匯出.sql資料庫檔案,並匯出war包,準備部署到linux下的tomcat伺服器上。部署完成出現中文問題: 問題描述:1.資料庫中原有的資料都能正常顯示2.頁面顯示讀取出來出現亂碼問題的解決過程: 考慮流程:1、資料庫儲存格式

Linux執行ActiveMQ命令

進入到linux中安裝ActiveMQ的位置,cd ../apache-activemq-5.15.2/bin activemq啟動分linux-x86-32和linux-x86-64 進入bin/linux-x86-64下: cd linux-x86-64/ 啟動

linux伺服器執行java程式,引用外部jar包

 將寫好的java程式放到Linux上執行,可以利用Linux伺服器更快的跑完程式。由於我windows和linux下使用的jdk版本不同,因此將windows的java程式打成jar包後在linux下執行總會報錯。於是只能在Linux下使用javac命令編譯生成class

[原]NDK程式在虛擬機器執行出現signal 4 (SIGILL), fault addr 錯誤的原因及解決方法

終於到了移植的最後一步 ,但是編譯出來的SO檔案加入工程後在虛擬機器上總是無法執行,檢視DDMS發現報錯 03-14 10:43:08.623: INFO/DEBUG(28): signal 4 (SIGILL), fault addr 80a43224 03-14 10:

Linux系統下如何禁止ping命令或允許ping命令方法

1、禁止ping echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all 2、允許ping echo 0 >/proc/sys/net/ipv4/

jar檔案在無java環境的機器執行

最近做了一個小功能,幫行政的同事計算公司員工的缺勤和加班情況。使用後反映良好,於是一傳十十傳百,可是有些人拿到後傻眼了,為什麼我的機器執行不了呀…… 原來,他們的機器沒有java執行環境,而且有的是32位有的是64位,但有都不願意自己裝jdk…… 於是,我將

Linux系統中5種重複執行歷史命令方法

Linux 下,如果要執行一條或多條之前輸過的指令,要怎麼處理?很多人會想到使用上下箭頭去翻查歷史輸入的命令。這當然是可以了,除了

windows linux 使用python執行系統命令並將結果保存到變量

rtc 2008r2 digg 系統 ng- shc down post drive 最近需要用到os.system 發現不能賦值到變量 後查有更新的模塊,如下: os.system os.spawn* os.popen* popen2.* commands.* 重新使

處理svn不能執行cleanup命令方法

color cleanup alt vpd 死循環 image col images 不能 svn執行update的時候報錯: 按照提示執行cleanup操作,但是又報錯了,還是提示要執行cleanup,這下是進入死循環了。 在網上找了一下處理svn執行不了cleanup的

Linux系統傳下載命令rz和sz

file escape yum 進制 二進制 -o -- sca code Linux系統簡單易用的上傳下載命令rz和sz yum install lrzsz -y 上傳(rz)-b, --binary:以二進制方式傳輸,推薦使用-e, --escape:對所有控制字符轉

虛擬機器執行AntDesignPro

步驟: 1.  保證linux虛擬機器正常執行和訪問網路 2.  保證yum install git 正常 , 以及wget 命令正常 3.  正確安裝nodejs ,並能通過node -v 和npm -v檢驗正確安裝 ,通過npm 安裝yarn , 通過y

Linux不能執行netstat命令的原因及解決辦法

伺服器是阿里雲的,這是我出的錯,使用netstate命令報 -bash: netstate: command not found 出現這個錯誤的原因:由於網路工具沒有安裝 使用以下命令安裝即可: yum install net-tools 執行命令: netstat -

.net core 部署在Linux系統執行的環境搭建總結

原文: .net core 部署在Linux系統上執行的環境搭建總結   安裝Linux用的是騰訊雲的centos7.5,需要安裝有環境有mysql5.7  .netcore2.1 nginx1.14 1.首先是mysql的安裝 我用的連結工具是putty,首先root登入系統