命名空间System.Net.Networklnformation提供网络流量数据、网络地址信息、侦测网络是否允许存取等相关功能的特定类。
Ping 类
Ping类提供侦测网络联机状态所需的功能,该类必须配合其他几个类,才能取得相关的数据,如:
IPStatus 定义状态代码,其描述ICMP回显请求消息的结果;
PingOptions 设置或获取:封包的转送次数(Ttl),以及封包是否可以分散DontFragment);
PingReply 包含ICMP回显请求的结果;PingReply对象封装了执行ping操作的过程中,网络所返回的结果。
PingException 在发生无法复原的错误时抛出(相关操作的异常类)。
基础知识
--------------------
ICMP
是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性。
---------------------
RTT
(Round-Trip Time): 往返时延。表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
往返延时(RTT)由三个部分决定:即链路的传播时间、末端系统的处理时间以及路由器的缓存中的排队和处理时间。
前面两个部分的值作为一个TCP连接相对固定,路由器的缓存中的排队和处理时间会随着整个网络拥塞程度的变化而变化。
所以RTT的变化在一定程度上反映了网络拥塞程度的变化。
-------------------
TTL
是生存时间 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段,它位于IPv4包的第9个字节。
TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64。
TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息。
-------------------
一、Ping类的方法Send()
向特定的网络传送ICMP响应消息,参数为Ip或主机名,结果为返回的ICMP回复消息,并封装在PingReply对象:
Public Function Send ( address As IPAddress )As PingReply Public Function Send ( hostNameOrAddress As String )As PingReply
例:
Dim myPing As New Ping()
Dim prReply As PingReply = myPing.Send(“192.168.1.3”)
二、PingReply对象
它无法直接建立,只能通过Send()方法取得。它的几个属性比较重要:
Address 取得返回的IP;
Buffer 取得ICMP响应回复时收到的数据缓冲区大小(Byte数组);
Options 取得选项,ICMP回复消息的内容;
Status 取得不同的ICMP响应消息状态。
1、Options
是ICMP回复消息的内容,它返回一个pingOptions类对象:
Public Readonly Property Options As PingOptions
PingOptions设置或获取:封包的转送次数(Ttl),封包是否可以分散(DontFragment):
reply.Options.Tt1
reply.Options.DontFragment
(reply为PingReply 对象)
2、Status
是一个IPStatus列举类,它定义了大量的列举值,代表不同的ICMP响应消息状态。
其中包含了回应成功的Success及各种失败原因,例如没有在指定时间内收到ICMP响应的TimedOut、生存时间 (TTL)值已到达零,导致转送节点(路由器或网关)舍弃封包的TimeExceeded等。
Imports System.Net.NetworkInformation Public Class Form1 Private Sub btnIP_Click(sender As Object,e As EventArgs) Handles btnIP.Click Dim myIP As New Ping Dim prReply As PingReply = myIP.send(txtIP.Text) txtInfo.Text = "IP地址: " & prReply.Address.ToString & vbCrLf & "缓冲大小:" & prReply.Buffer.Length & vbCrLf & "往返时延:" & prReply.RoundtripTime & vbCrLf & "生存时间:" & prReply.Options.Ttl & vbCrLf & "成败状态:" & prReply.Status.ToString End Sub End Class