[源码和文档分享]基于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 系统结构流程

 


参考文档和完整的文档和源码下载地址:

https://www.write-bug.com/article/1416.html

猜你喜欢

转载自blog.csdn.net/demongwc/article/details/84935858