1. 程式人生 > >java程式碼實現ping命令(支援linux系統)

java程式碼實現ping命令(支援linux系統)

一.檢測當前作業系統的型別

String osName = System.getProperty("os.name");//獲取作業系統型別
String command = "";
if(osName.contains("Linux")){
  command = "ping -c 100 -i 0"+ip;
}else if{
  command = "ping -n 5 -w 1000"+ip;
}
Properties props=System.getProperties(); //獲得系統屬性集    
String osName = props.getProperty("os.name"); //作業系統名稱    
String osArch = props.getProperty("os.arch"); //作業系統構架 String osVersion = props.getProperty("os.version"); //作業系統版本

二.Linux和Windows的ping指令介紹

.Ping命令通過傳送Internet控制訊息協議(ICMP)迴響請求訊息來驗證與另一臺TCP/IP計算機的IP級連線
.Ping命令一般用於檢測網路通與不通,也叫延時,其值越大,速度越慢PING(PacketInternetGroupe),因特網包探索器,用於測試網路連線量的程式。
.Ping傳送一個ICMP回聲請求訊息給目的地並報告是否收到所希望的ICMP回聲應答。它是用來檢查網路是否通暢或者網路連線速度的命令。
.原理:網路上的機器都有唯一確定的IP地址,我們給目標IP地址傳送一個數據包,對方就要返回一個同樣大小的資料包,根據返回的資料包我們可以確定目標主機的存在,可以初步判斷目標主機的作業系統等。

Ping的工作流程

.1,在同一網段內
.ping
.主機A——————>主機B
.ICMP請求包
.在本機(主機A)查詢ARP快取表查詢主機B的IP與其對應的MAC,
.沒有找到主機B的IP與其MAC的對映關係,則傳送一個arp請求廣播。
.主機B接受到arp請求包後,回覆一個arp應答包(裡面包含本機的MAC),
.主機A<—————主機B
.ICMP應答包
.2,不在同一網段
.在主機A上執行“ping主機C(不在同一網段)”後,開始跟上面一樣,到了怎樣得到MAC地址時,IP協議通過計算髮現C機與自己不在同一網段內,就直接將交由路由處理,也就是將路由的MAC取出來,至於怎樣得到路由的MAC,跟上面一樣,先在ARP快取表找,找不到就廣播包,路由得到這個資料幀後,再跟主機c進行聯絡,如果找不到,就向主機A返回一個超時的資訊。

Linux的ping命令的使用

.ping命令的一般格式為:
ping[-dfnqrRv][-c傳送次數][-i間隔秒數][-I網路介面][-l前置載入][-p範本樣式][-s資料包大小][-t存活數值][主機名或IP地址]
【-ccount】指定要被髮送(或接收)的回送訊號請求的數目,由Count變數指出。
【-wtimeout】這個選項僅和-c選項一起才能起作用。它使ping命令以最長的超時時間去等待應答(傳送最後一個資訊包後)。預設超時時間為4000ms(4s)
【-d】使用Socket的SO_DEBUG功能
http://blog.csdn.net/zhangxinrun/article/details/7207733

三.ping命令的Java程式碼

Runtime runtime = Runtime.getRuntime();
Process process;
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is,Charset.forName("GBK"));
BufferedReader br = new BufferedReader(isr);
String line="";
String status = "";
String packetLoss = "";
String timeout = "";
while ((line = br.readLine())!=null){
Boolean bl = !"".equals(line);
//英語Linux OS
if(line.indexOf("packet loss")!=-1 && b1){
  String[] str = line.split(",");
  packetLoss = str[2].replace("packet loss","").trim();
  status = ip+":----->丟包率:"+packetLoss;
}else if(line.indexOf("min/avg/max/mdev") !=-1&&b1){
  timeout = line.split("=")[1].split("/")[1];
  status+="----->延時:"+timeout+"ms"
}
//中文windows os
else if(line.indexOf("丟失") !=-1&&b1){
packetLoss = line.subString(line.indexOf("(")+1,line.indexOf(")").repalce("丟失""").replace("%","").trim())
}else if(line.indexOf("平均")!=-1&&b1){
  timeout = line.substring(line.indexof("平均").split("=")[1].trim())
}
}

個人總結:專案中我需要事先監控一個IP得網路連結情況,開始不懂這樣寫的原理,後來寫完後我明白了,其實java實現ping命令就是在cmd執行ping命令,通過java方法啟動cmd執行ping命令,然後解析成自己想要的結果。

相關推薦

java程式碼實現ping命令(支援linux系統)

一.檢測當前作業系統的型別 String osName = System.getProperty("os.name");//獲取作業系統型別 String command = ""; if(osName.contains("Linux")){ comm

hadoop入門之通過java程式碼實現將本地檔案上傳到hadoop的檔案系統

package upload;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.URI

Java實現ping命令驗證遠端主機是否線上

為了使用java來實現ping的功能,有人推薦使用java的 Runtime.exec()方法來直接呼叫系統的Ping命令,也有人完成了純Java實現Ping的程式,使用的是Java的NIO包(native io, 高效IO包)。但是裝置檢測只是想測試一個遠端主機是否可用。所以,可以使用以下三種方式

linux中用C語言實現ping命令

運用C語言編寫模擬常用網路命令ping命令實現一個基於Linux原始套接字和ICMP協議的ping程式。該程式能用於檢測主機或路由器工作是否正常。 程式中主要的函式 void alarm_handler(int); /*SIGALRM處理程式*/ void int_h

Java程式設計師必須掌握的Linux系統常用命令

linux系統常用命令:1.關機:shutdown -h now 立即關機                               n(n分鐘後關機)                          -r  重啟2.設定root初始密碼: sudo passwd3.進入

Java實現Ping命令

在專案中需要判斷目錄伺服器是否線上,需要用到ping命令,調研有兩種方法: 使用Java API的InetAddress方式 使用Runtime.exec呼叫作業系統的命令CMD 使用InetAddress實現Ping 自Java 1.5開始,java.net包中就實現

Linux下的ping命令支援中間顯示簡短統計資料

使用Linux的ping命令時,在ping的過程中,如果想看簡要統計資料,可以按Ctrl+| (不是I鍵,是豎線鍵) http://www.think-lamp.com/2009/03/the-hidden-power-of-ping/ ipg: InterPac

linux目錄操作命令大全 linux系統開發學習

dir 一次 時間 掛載 變換 方式 遞歸 介紹 inux Linux的目錄結構為樹形結構,最頂級的目錄為根目錄,其他目錄通過掛載添加到樹中,通過解除掛載來進行刪除,除此之外,還可以對目錄進行其他處理操作,常用的目錄處理命令如下:1. ls命令(列出目錄)常用用法:ls –

Windows 中通過Python實現ping命令加時間戳

Windows Python ping 由於ping命令在ping的時候無法加入時間,不能夠直觀分析結果。便想在ping的時候加入時間戳。 1.首先需要系統配置了Python的環境,我的環境如下,這裏就不介紹環境搭建步驟。 2.以下是代碼展示,新建一個ping.py文件im

java web項目部署在linux系統出現第一次登錄高延遲的問題

inux 重要 系統 隨機 需要 .so lib 出現 初始化 今天記錄一下之前遇到的問題:項目部署在window登錄能很快完成,部署到linux後,第一次登錄過程變得很慢。通過查看系統日誌,發現時間主要消耗在了創建session,並且定位到是SecureRandom的初始

CCF認證201803-2 碰撞的小球 java程式碼實現

問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。   當兩個小

億級別記錄的mongodb分頁查詢java程式碼實現

1.準備環境   1.1 mongodb下載   1.2 mongodb啟動      C:\mongodb\bin\mongod --dbpath D:\mongodb\data   1.3 視覺化mongo工具Robo 3T下載 2.準備資料    <d

Java程式碼實現負載均衡五種演算法

版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/u012904383/article/details/78358354 前言:        

Linux——kickstart:實現批量自動安裝linux系統

如何實現批量自動安裝linux系統功能 > httpd+dhcp+kickstart+指令碼=PXE (1)開啟httpd服務 注: 首先要搭建本地yum源用yum下載httpd,這裡的客戶端已經下載過,就不再贅述 讀者對此有疑惑的,可以檢視文章Linux——搭建本地yum

演算法學習——中國大學MOOC-陳越、何欽銘-資料結構-起步能力自測題——java程式碼實現

自測-1 列印沙漏 (20 point(s)) 本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印 ***** *** * *** ***** 所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大

java程式碼實現MySQL資料庫表千萬條資料去重

  準備工作: 1.資料庫表:datatest5 2.欄位: id 主鍵自增,val 重複值欄位併為val建立索引 3.設定innodb緩衝池大小 show variables like "%_buffer%"; SET GLOBAL innod

十大經典排序演算法詳細總結(含JAVA程式碼實現)

文章目錄 十大經典排序演算法詳細總結(含JAVA程式碼實現) 0、排序演算法說明 1、氣泡排序(Bubble Sort) 2、選擇排序(Selection Sort) 3、插入排序(Insertion Sort) 4、希爾

十大排序演算法的實現 十大經典排序演算法最強總結(含JAVA程式碼實現

十大經典排序演算法最強總結(含JAVA程式碼實現)   最近幾天在研究排序演算法,看了很多部落格,發現網上有的文章中對排序演算法解釋的並不是很透徹,而且有很多程式碼都是錯誤的,例如有的文章中在“桶排序”演算法中對每個桶進行排序直接使用了Collection.sort

java 程式碼實現各資料的正則校驗

最近公司的專案,關於excel匯入匯出,對資料要進行校驗,所以就對資料的正則校驗就用的比較多,自己也是一點點去查,現在專案完成了,就把所有用到的都做一個小結,或許以後還可以用到! package org.asyware.insurance.util; import java.util.reg

支援Linux系統的加密狗

深思數盾 產品:精銳5 版本:標準版、精靈版、IE版、時鐘鎖 快速實現高安全度的軟體保護,輕鬆定義多種授權模式 1.防止軟體盜版,防止逆向工程 通過增強的外殼保護和API兩種 方式,對軟體進行加密,從而保護軟體開發商的核心知識立權,確保市場收入。 2.按時間,期限,