Pingコマンドを探検
1. Pingコマンドを使用しています。
まず、私たちは私たちにインスピレーションのWindowsを与えてみましょう
Cmdを直接入力のPing
システムは、pingコマンドの主な目的は、テストネットワークの接続性にある、私たちにヒントをたくさん与えています
含みます:
- 特定のアドレスへの接続テストIP
ピング特定のIPアドレスが成功する場合は、明らかに正常な通信を示してい
しかし、それは注目に値する、pingがどこにも彼がアクセスできない、一般的にgithub.comを意味しません
あなたもアクセスすることができた場合でもpingできません
2.インターネットへの接続をテスト
私たちは、多くの場合、pingの使用www.baidu.comを通常の状況下では、ネットワーク接続状態をテストし、pingをBaiduのネットワーク異常が失敗=
3.テストネットワーク・プロトコルの作業を行います
マシンの代わりにループバックアドレス127.0.0.1にping 127.0.0.1は、ネットワークプロトコルの成功は仕事をしません説明できない場合
2. Pingのwww.baidu.com与のping 127.0.0.1
私たちは、pingに傍受データパケットにwiresharkの使用www.baidu.com
パケット
かどうかパケットからcmdの出力から、見ることができるWindowsのコンソールコマンドpingのpingリクエストは、応答のために4回を待つ送られました
Pingの127.0.0.1
状況は少し特殊です。
CMD:
Wiresharkの
それ以外の場合は特別なセット小さいパケットよりもキャプチャWiresharkのない限りデータは、マシンを残したことがないので通信は、良いを参照してくださいが、パケットをキャプチャすることはできませんが。
3. JAVA(Kotlin)とPing
Javaのネイティブハンドリングネットワークを要求されています
java.net.HttpURLConnectionの
しかし、あなたがリクエストメソッドを指定した場合は、Pingのための例外がスローされます
httpURLConnection.setRequestMethod( "PING")。
,这是因为HttpURLConnection类不支持Ping方式
private static final String[] methods = new String[]{"GET", "POST", "HEAD","OPTIONS", "PUT", "DELETE", "TRACE"};
一般通过InetAddress类.isReachable (int timeout)方法来代替ping的作用,以验证可达性
我们研究这个过程是否和ping过程完全一致:
通过两个步骤
- Ping www.baidu.com(使用Kotlin实现)
fun main(args:Array<String>){
val address: InetAddress
try {
address = InetAddress.getByName("www.baidu.com")
println("Name:" + address.hostName)
println("Addr:" + address.hostAddress)
println("Reach:" + address.isReachable(3000))
println(address.toString())
} catch (e: Exception) {
e.printStackTrace()
}
}
输出:
往返报文
从这个角度看,Java中的.isReachable似乎是通过Ping实现的,但第二次试验说明这两个过程并不完全相同
2.这一次我们指定Ip地址而不是www.baidu.com
address = InetAddress.getByName("180.101.49.12")
输出
仍然可达,但捕获的报文有所区别:
可以看到多了三个NBNS报文
所以我们得出结论:Java中的InetAddress类的.isReachable方法可以起到和Ping相同的作用,有些时候和Ping相同,但不总和Ping完全的等价。