問題タブ [icmp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Javaを使用してマルチプラットフォームにpingを実行する
ip/machineへのpingを実行する必要があります。コードはあらゆる種類のプラットフォーム(Windows、Linux、Mac)で実行でき、損失とラウンドトリップ時間に関する情報を取得する必要があります。したがって、Javaのpingの実行は十分ではありません。これは、ping応答を文字列として解析する必要があるためです。これは、プラットフォームごとおよびOS言語ごとに異なります。だから私は何をする必要がありますか?JNIのようなものがあることは知っていますが、私はJavaを初めて使用するので、ここで少し助けが必要です。それでも、プラットフォームごとにネイティブ実装が必要であることを意味しますか?例や提案はありますか?
c# - C#-ICMPが無効になっているPingサーバー
PingReplyクラスを使用して一連のサーバーに頻繁にpingを実行しようとしています。ほとんどの場合、これは問題ありませんが、pingが失敗する場合もあります。これは、リモートサーバーでICMPが無効になっていることと関係があると思います。ICMPが無効になっている場合でも、サーバーからpingを取得する方法はありますか?
udp - Windows の UDP ソケットで ICMP ポート到達不能パケットを取得する方法
UDP で sendto() を使用してさまざまなポートのリソースをチェックするアプリケーションがあります。recvfrom() を使用して ICMP ポート到達不能パケットを取得するにはどうすればよいですか?
私の recvfrom() は次のようなものです:
ICMP ポート到達不能が発生すると、nReceived = -1 となり、WSAGetLastError() は WSAECONNRESET(10054) を返します。
しかし、さまざまなポートをチェックしているので、どのポートが ICMP ポート到達不能メッセージをトリガーしたかを判別する方法が必要です。どうすればそれを判断できますか?(ソケットのオプションをいくつか設定できますか?)
編集: Len の提案 (ICMP のみを使用) に従って、ソケット (AF_INET、SOCK_RAW、IPPROTO_ICMP) ごとにソケットを作成しようとし、recvfrom() を呼び出しました。ソケットがバインドされていないため、recvfrom() は 10022(WSAEINVAL) エラーを返します。どうすれば修正できますか?
actionscript - swf から ICMP エコー要求を送信することは可能ですか?
ActionScript 3 は、 flash.net.DatagramSocketを介して UDP パケットを送信できます。ICMP パケットを送信する方法はありますか? また、 Tracerouteを SWF に実装できるように、TTL フラグを設定したいと考えています。
icmp - 経路MTU探索-ICMP応答はどこにありますか?
Linuxで経路MTU探索を使っていくつかの実験を行っています。RFC 1191から理解した限りでは、ルーターがゼロ以外のDFビットを含むパケットを受信し、そのパケットを断片化せずに次のホストに送信できない場合、ルーターはパケットをドロップして、ICMPメッセージを最初のホストに送信する必要があります。送信者。
コンピューター上にいくつかのVMを作成し、次の方法でそれらをリンクしました。
Rx-Linuxがインストールされた仮想マシンであり、静的ルートを持つ2つのネットワークインターフェイスがあります。V1からV2にpingを実行し、その逆も成功します。
セグメント100.xおよび150.xにはMTU1500があります。セグメント200.xにはMTU750があります。
DFを有効にしてUDPパケットを送信しようとしています。事実、パケットのサイズが750を超える場合、VM1はパケットをまったく送信しません(send()呼び出しでEMSGSIZEエラーを受け取ります)。
ただし、サイズが1500を超えるパケットでは、このような動作が予想されます。また、VM1は750〜1500のサイズのパケットをR1に送信し、R1(またはR2)はそのようなパケットをドロップしてICMPパケットをVM1に返すと予想します。 。しかし、これは起こりません。
2つの質問があります:
1)なぜですか?
2)RFC 1191に従ってICMPパケットを受信するように仮想ネットワークを設定することは可能ですか?
ありがとう。
c - PING プログラム作成時の ICMP エコー応答の制限
マルチスレッドのpingプログラムを書いていました。各スレッドで (IP ごとに) rawsocket を作成し、sendto() を使用してそれぞれに ICMP Echo Request を送信してから、各スレッドで recvfrom() を実行しました。さまざまなソケットで IP からメッセージを取得しています (IP1 の sendto にソケット S1 を使用した場合、IP1 から S1、S2 などへのエコー応答を取得します)。バインドを行う必要がありますか?
また、別の問題は、ICMP リクエストを 1 つしか送信していないにもかかわらず、ターゲットから多くのエコー応答が返されることです。これを制限する方法はありますか?これにより、他の ICMP パケットの一部が失われます。プログラムが ICMP エコーの送信を停止するようにターゲットに要求する方法はありますか?
ありがとう、
c# - UDP を使用して Traceroute を実装するにはどうすればよいですか?
どうやら、Traceroute を作成する方法は ICMP だけではありません。This and this answer は、UDP パケット (またはその他のパケット) を低い TTL で送信し、ICMP メッセージを待つことが可能であることを示しています。
これをC#で実装するにはどうすればよいですか? System.IO.Sockets? TCP オブジェクト? 誰でも簡単/最良の方法を知っていますか?
更新 1:
次のコードは、TTL に到達したときに正しく例外をスローするようです。返された UDP パケットから情報を抽出するにはどうすればよいですか?
受信している UDP パケットが自分宛てのものであること (ホスト上の他のアプリケーションではないこと) を確認するにはどうすればよいですか?
android - Androidでicmp pingを実行する方法
Android デバイスからホストに icmp ping を実行する必要があります。往復時間を測定する必要があります。私はAndroidとJavaに堪能ですが、どのライブラリを使用すればよいかわかりません。どうすればいいのですか?3G、Edge経由で可能ですか?
c - ICMPv6チェックサムを検証するにはどうすればよいですか?(なぜ0x3fffのチェックサムを取得し続けるのですか?)
IPv6ルーターアドバタイズメントパケットを受信するLinuxユーザースペースプログラムに取り組んでいます。RFC4861の一部として、ICMPv6チェックサムを検証する必要があります。私の調査によると、IPv6疑似ヘッダーとパケットの内容のチェックサムを補完するものを計算すると、そのほとんどは一般にIPチェックサムを参照します。結果は0xffffになります。しかし、私は0x3fffのチェックサムを取得し続けます。
チェックサムの実装に何か問題がありますか?Linuxカーネルは、パケットをユーザースペースに渡す前にICMPv6チェックサムを検証しますか?テストするための既知の良好なICMPv6パケットの適切な参照ソースはありますか?
linux - ICMPv4/v6 リダイレクト パケットを受信しましたが、ルート テーブルが更新されていませんか?
FreeBSD/Linux では、ICMPv4/v6 Redirect pkt は OS で受信できますが、ルート テーブルはそれに応じて変更されませんか?
リダイレクト pkt を受け入れるために、/proc の下で必要な sysctl 変数を有効にしました。
なにか提案を?