[原始碼和文件分享]基於java語言的FTP伺服器(Ping測試工具軟體)
一 需求分析
-
已知引數:目的節點IP地址或主機名
-
設計要求:通過原始套接字程式設計,模擬Ping命令,實現其基本功能,即輸入一個IP地址或一段IP地址的範圍,分別測試其中每個IP地址所對應主機的可達性,並返回耗時、生存時間等引數,並統計成功傳送和回送的Ping報文
-
初始化WindowsSockets網路環境
-
解析命令列引數,構造目的端socket地址
-
定義IP、ICMP報文
-
接收ICMP差錯報文並進行解析
-
-
程式實現主要用到Java網路包中的類InetAddress
二 程式設計
2.1 設計思路
ping 程式是用來探測主機到主機之間是否可通訊,如果不能ping到某臺主機,表明不能和這臺主機建立連線。ping 使用的是ICMP協議,它傳送ICMP回送請求訊息給目的主機。ICMP協議規定:目的主機必須返回ICMP回送應答訊息給源主機。如果源主機在一定時間內收到應答,則認為主機可達。
ICMP協議通過IP協議傳送的,IP協議是一種無連線的,不可靠的資料包協議。因此,保證資料送達的工作應該由其他的模組來完成。其中一個重要的模組就是ICMP(網路控制報文)協議。
當傳送IP資料包發生錯誤,比如主機不可達,路由不可達等等,ICMP協議將會把錯誤資訊封包,然後傳送回給主機。給主機一個處理錯誤的機會,這也就是為什麼說建立在IP層以上的協議是可能做到安全的原因。ICMP資料包由8bit的錯誤型別和8bit的程式碼和16bit的校驗和組成。而前16bit就組成了ICMP所要傳遞的資訊。
PING利用ICMP協議包來偵測另一個主機是否可達。其原理是用型別碼為0的ICMP發請求,受到請求的主機則用型別碼為8的ICMP迴應。ping程式來計算間隔時間,並計算有多少個包被送達。使用者就可以判斷網路大致的情況。
本程式使用java語言來實現ping的功能,可以有三種方法:
-
第一種是用Java 1.5,java.net包中的InetAddress實現ICMP ping的功能,雖然程式碼簡單,但不可靠,在Linux系統下會不可靠
-
第二種是使用java呼叫cmd命令,這種方式最簡單,可以把ping的過程顯示在本地
-
第三種也是使用java呼叫控制檯的ping命令,具體的思路是這樣的:
通過程式呼叫類似“ping 127.0.0.1 -n10 -w 4”的命令,這命令會執行ping十次,如果通順則會輸出類似“來自127.0.0.1的回覆: 位元組=32 時間<1ms TTL=64”的文字(具體數字根據實際情況會有變化),其中中文是根據環境本地化的,有些機器上的中文部分是英文,但不論是中英文環境,後面的“<1ms TTL=62”字樣總是固定的,它表明一次ping的結果是能通的。如果這個字樣出現的次數等於10次即測試的次數,則說明127.0.0.1是百分之百能連通的。
技術上具體呼叫dos命令用Runtime.getRuntime().exec實現,檢視字串是否符合格式用正則表示式實現。
本程式選用的是使用第三種方法。
2.2 系統結構流程
參考文件和完整的文件和原始碼下載地址: