問題タブ [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.
networking - ICMPヘッダーチェックサムにはデータも含まれていますか?
宿題の一環として、生のソケットを使用してICMPエコー要求に対するICMP応答を生成するCプログラムをLinuxで作成する必要があります。ICMPパケットのデータもチェックサムに含める必要がありますか?または、ヘッダーのみのチェックサムを計算する必要がありますか?
windows-xp - Windows XP および ICMPv6 上の WinSock2
ping6
WinSock2 を使用してプログラムで ICMPv6 エコー リクエスト ( ) を送信しようとしています。ICMPv6 チェックサムは、送信される IPv6 パケット全体に基づいて計算されます。そのため、私が理解していることから、OS(カーネル?)はそれを計算し、パケットを送信するときにICMPv6ヘッダーに書き込むことになっています。
これは SUSE Linux Enterprise Server 11 では非常にうまく機能しますが、Windows XP ではそうではないようです。チェックサムはデフォルトで設定した値 (ゼロ、Wireshark を使用して分析) のままになるため、受信側はそれを破棄し、応答しません。
この WinXP マシンでは IPv6 が正しく設定されています。Wireshark の助けを借りて、まったく同じコードを使用して送信された SUSE Linux サーバーからの ICMPv6 ping に正しく応答することがわかりました。したがって、Windows XP が ICMPv6 をサポートしていないわけではありません。しかし、Windows XP の WinSock2 はそうするのだろうか。
WinSock2 API はIPPROTO_ICMPV6
、生のソケットを作成するためのプロトコルを提供します。ICMPv6 チェックサムを自動的に計算するために設定する必要がある特別なソケット オプションはありますか、それとも他のトリックはありますか?
python - SOCKSサーバーを介してpingを使用しますか?
SOCKSサーバーが正常に動作しているかどうかを定期的にチェックしたいと思います。そのために、SOCKSサーバーを介して8.8.8.8(google DNSサーバー)にpingを実行することを考えました。
他に推奨される方法はありますか?最適な場合、PythonでSOCKSをpingするにはどうすればよいですか?
linux-kernel - LinuxカーネルのICMP実装に関する質問
現在のLinuxカーネルでは、
ICMPモジュールがECHOREQUESTメッセージを受信すると、データサイズをチェックまたは制限しますか?それとも、データを新しいICMPメッセージに入れて、ソースに送り返すだけですか?
私はソースコードを読んでいて、カーネルがデータサイズをチェックしないことはかなり確信していますが、それを確認したいと思います:)
python - Pythonを使用して接続をトンネリングするために、icmp経由でデータを埋め込んでリッスンする方法
1 つのトンネル ツールをコーディングしようとしていますが、icmp からパケットを受信できませんでした。ソケット ライブラリを使用しています。pylibnet または pynet ライブラリはありますか
c# - ICMP Disable/Blocked:C# を使用してインターネット接続を確認する方法
ICMP が管理者によってブロックまたは無効にされている場合。ping テストができない場合に、C# を介してインターネット接続を確認する方法はありますか。
前もって感謝します。
python - Pythonrawソケットから受信したパケットで2バイトがスワップされました
私のPythonプログラムは、rawソケットからICMP宛先到達不能メッセージを受信しています。ソケットは次のコードで作成されます。
ICMP宛先到達不能メッセージには、元のパケットの一部のコピーが含まれます。私が経験している問題は、埋め込まれたIPv4ヘッダーの2バイトの合計長フィールドが、ソケットから受信するときにバイトが交換されることです。これが原因で、私のプログラムのチェックサムチェックに失敗します。パケットは次のコードで受信されます。
チェックサムテストが失敗していることに気付いたとき、tcpdumpを使用してパケットを検査しました。次に例を示します。
次に、Pythonコードからパケットを印刷しました。これは、tcpdumpの例からの同じパケットです。
埋め込まれたヘッダーの全長フィールドは、2行目の最後の2バイトです。tcpdumpからの0054と私のプログラムからの5400。外部IPヘッダーのtotal-lengthフィールドも間違っています(tcpdumpの0070に対して5c00)。
私は走っています...
Python 2.6.1(r261:67515、2010年6月24日、21:47:49)[GCC 4.2.1(Apple Inc.ビルド5646)] on darwin
tcpdumpからのICMP宛先到達不能パケットのチェックサムフィールドは正しいです。fcfeの値があります。これは、outIPヘッダーのないパケットです。
私を混乱させるのは、全長フィールドのみがネットワークバイトオーダーに対して修正されることです。他のマルチバイトフィールドは変更されず、Pythonプログラムと同じように出力されます。たとえば、全長の後の2バイトは、tcpdumpと印刷出力の両方でc2eaの値を持つ識別フィールドを構成します。チェックサムをチェックする目的でどのフィールドを交換する必要があるかをどのように判断できますか?
c - UDPソケットがECONNREFUSEDの受信に失敗する
socket(AF_INET、SOCK_DGRAM、IPPROTO_UDP)を使用してソケットを作成しました。
これによると、単純なパケットを数回送信すると(send()やsendto()を掛ける)、ECONNREFUSEDを取得できます。ICMPは、前のパケットが到着しなかったことを通知し、ECONNREFUSEDが表示されるはずです。しかし、それは失敗し、errnoはエラーについて報告せず、send()は常に送信されたバイト数を返します。
UDPプロトコルは、実際にはパケットが送信されたことを通知するべきではありません。しかし、私が理解しているように、ICMPはアドバイスを与えることができます。
だから、問題は-なぜECONNREFUSEDを受け取れないのですか?
すべてはWinsockを使用して行われます。
ping - Speedtouch st780i が ICMP をブロックしている
ping テストを行うためのツールを VB で作成していますが、一部の speedtouch 780i ルーターが ICMP をブロックしています。
Speedtouchルーターで自分で試してみました。Telnet でファイアウォールと侵入検知を無効にしましたが、それでも ICMP はブロックされます。
私が持っている実際の質問は、Speedtouch ルーター構成で ICMP を実行できるように修正する方法ではありません。ルーターに触れずにこの問題を回避する方法にもっと興味があります。
ブラウザを使用して Web アプリケーションで ping テストを行うと、すべて正常に動作することに気付きました。cmd で ping を実行しても機能しません。ポートの問題かもしれないと思いますが、よくわかりません。