問題タブ [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.
erlang - Erlang で UDP の到達不能ポートを検出する
Erlang で発信 UDP パケットの「ポートに到達できない」エラーを検出する方法を探しているので、トランスポート層のエラーをアプリケーションに積極的に報告できます。つまり、パケットが宛先に到達していないことを上位層に報告するために、ICMP タイプ 3 パケットをキャプチャしたいと考えています。
現在、私は2つのアプローチについて知っています:
- 文書化されていない を使用し
gen_udp:connect/3
ます。ただし、これには、新しい宛先ペア address:port ごとに新しいソケットを開く必要があるようです。利点は、これには特権が必要ないことです。 - raw ソケットを開くには、setuid ヘルパーまたは機能のいずれかを必要とするgen_icmpを使用します。
不足している他のバリアントはありますか?
windows - 管理者権限がなくてもpingが機能するのはなぜですか?
ご存知かもしれませんが、管理者権限がないと、WindowsSocketsを使用してRAWソケットを作成することはできません。問題は、ICMPメッセージを送信する必要があるため、RAWソケットが必要なことです。問題:私のプログラムは管理者権限なしで実行する必要があります。
それは私に質問につながります、pingツールはどのように管理者権限なしでICMPメッセージを送信しますか?
c - cygwinでのicmp関連コードのコンパイル(「icmp」構造体がありません)
cygwinを使用してネットワークツール(iffinder)をコンパイルしています。
その後./configure
、make
私は私が推測する問題がありstruct icmp
ます。icmp
ヘッダーファイルの構造体はどこにありますか。cygwinヘッダーファイルで検索しましたが、何も見つかりませんでした。
icmp
cygwinで必要なソースコードをコンパイルするにはどうすればよいですか?
それが役に立ったら、 iffinderのソースコードを ここで見つけることができます
注:ip_icmp.h
cygwinのヘッダーファイルにあります。
コンパイルエラー:
iffinder.c:1059:警告:パラメータリスト内で「structicmp」が宣言されました
iffinder.c:1059:警告:その範囲はこの定義のみ、または
宣言、これはおそらくあなたが望むものではありませんiffinder.c:In
関数`handle_icmp_error':iffinder.c:1069:エラー:逆参照
不完全な型へのポインタ
..。
c - Linuxでcのicmp応答からMACアドレスを抽出するにはどうすればよいですか
生パケットを送信した後、スイッチ環境でマシンの MAC アドレスを見つけようとしています。traceroute コマンドを実装しようとしています。ICMP 時間超過メッセージを受信したときに、そのマシンの MAC アドレスを抽出する方法を知りたいです。私はネットワーク プログラミングが初めてなので、MAC アドレスを抽出するのにどのソケット呼び出しが役立つのか混乱しています。
ありがとう 。
ipv6 - libnet で ICMPv6 パケットを構築するには?
libnet で ICMPv6 パケットを構築することは可能ですか? 私が目にする唯一の関数は、ICMPv4 ( libnet_build_icmpv4_xxxxx() ) に関するものです。ありがとうございました。
ruby - RubyのICMP / PING「サーバー」
RubyでICMPサーバーを書くことは可能ですか? このサーバーを 192.168.1.4 にインストールし、am/c を 192.168.1.6 ping 192.168.1.4 にインストールすると、組み込みの ICMP サーバーではなくカスタム Ruby ICMP サーバーが応答を送信します。
wireshark - tracerouting での最初の重複パケットの意味は何ですか?
traceroute を実行すると、送信する最初のパケットは ttl=1 になり、ルーターからの応答は常に「null」「timeout」になります。それが私が理解できない最初のことです:なぜ私のルーターは私に時間を超えた icmp メッセージを送らないのですか?
Wireshark を使用して、最初のパケット (ttl=1 のもの) の複製が少なくとも 2 つあり、ルーターからの null 応答が 1 つだけあることを確認しました。
私はそれが私のコードの問題だと思っていましたが、wireshark が同じことを示している youtube のビデオがたくさんあります: PC は 2 つまたは 3 つのパケットを ttl=1 で送信してから、時間を超えた icmp メッセージを受信し、ttl を 2 に増やします。
これについて説明していただけますか?
編集: 私は間違いを犯しました: "null" または "timeout" パケットはルーターによって送信されません。まだパケットを受信していない pc からのメッセージです。したがって、ttl は増加しません。これで、正しい質問を定式化できます。最初のパケットが宛先に到達できないのはなぜですか? これは ttl の問題ではありません (2-3-4 に設定でき、最初の送信では常に同じ重複があります)。
多分それは断片化の問題ですか?しかし、なぜ?一部の Wireshark のログは、最初の送信後に mss (または mtu..can't rememebr) が変更されたことを強調しています。
c - Linux TAP デバイスで ARP または ICMPv6 パケットが処理されないのはなぜですか
を使用してTAPデバイスを開いています
私が直面している問題は、アプリケーション (mozilla など) がタップ デバイスを介してパケットを送信したい場合、dst MAC アドレスを取得する必要があることです。そのため、カーネルは ARP 要求を送信します。私が書いているアプリケーションは、arp 要求を (物理 eth デバイスの raw ソケットを介して) 転送し、arp 応答を受け取ります。この arp 応答はタップ デバイスに転送されますが、カーネルはこれを受け入れることを拒否します。arp エントリを手動で追加すると、arp 要求は生成されず、双方向の IP パケット交換が行われます (mozilla は満足しています)。
Wireshark はパケットを受信でき、エラーは検出されません。ICMPv6 パケット (近隣要請と広告) の場合も同様です。デバイスでリッスンしているすべてのアプリケーションは、パケットをそのまま取得します。しかし、カーネルは ARP/ICMP のためにそれを処理しません。
私の質問は、カーネルが arp 応答/ICMPv6 メッセージを受け入れないのはなぜですか? 呼び出す必要がある ioctl 呼び出しはありますか?
編集:
タップデバイス「ethgress」でキャプチャしたパケット(tshark出力)の詳細はこちら
これは、「ethgress」の ifconfig 出力です。
ご覧のとおり、カーネルは受信した ICMPv6 パケットの受け入れを拒否しています。ただし、tx パケットはインクリメントされます。
タップ デバイス「ethgress」は IPv6 アドレス fc00:1::2 で構成されており、アプリケーションは fc00:1::1 と通信しようとしています。fc00:1::1 は、適切な MAC アドレスを持つネイバー アドバタイズメント (ターゲット IP はそのパケットの fc00:1::1 です) で応答している fc00:1:100 と同じインターフェイスにあります。Tcpdump はそれをキャプチャすることができ、wireshark/tshark はそれなしでそれをデコードすることができ、適切に形成されたパケットであると言います。ただし、Rx カウンターはカーネルによってインクリメントされず、arp キャッシュも更新されません。ARP パケットの場合も同様です。
編集2:
ネットワークはこんな感じ。冗長構成の外部ボックスが 2 台あります。それらのうちの 1 つだけがアクティブになります。それらはそれぞれ物理 NIC を介して PC に接続されています。私が書いているアプリケーションはこの PC で実行され、各 NIC で raw ソケットを開きます。また、TAP デバイスも開きます。NIC に IP アドレスが設定されていません。TAP デバイスは、IPv4 と IPv6 の両方のアドレスで構成されています。mozilla などの標準アプリケーションは、タップ デバイスを介してソケットを開き、アクティブなボックスに接続しようとします。そのために、カーネルはタップ デバイスで ARP 要求/近隣要請メッセージを生成します。アプリケーションはこのメッセージを読み取り、両方の NIC に転送します。アクティブなボックスは、アプリケーションがそれを読み取り、TAP デバイスに書き込む ARP 応答で ARP 要求に応答します。この arp 応答パケットは tcpdump によってキャプチャされ、しかし、カーネルは arp キャッシュを更新しません。両方の NIC と TAP デバイスの MAC アドレスは同じです。
要求されるその他のパラメーター。
linux - ICMPソケット(Linux)
IPプロトコルでICMPソケットを使用することは可能ですか?多分次のようなものです:
socket(PF_INET, <type>, IPPROTO_ICMP)?
<type>
フィールドに何を入れるべきですか?を使用していくつかの例を見ましSOCK_RAW
たが、それはOSがIPプロトコルを処理する仕事をするのを妨げませんか?
そして別のこと。プロトコルに関係するポートがないため、OSはどのプロセスにICMPデータグラムを送信する必要があるかをどのように知ることができますか?
php - ApacheとCAP_NET_RAW
system()を使用せずにトレースルートを実行するphpスクリプトがあります。SOCK_RAWとICMPを使用します。
CAP_NET_RAWを使用して、rootユーザーがいなくても、またはsudoersで何かを変更しなくても、このスクリプトを実行することができました。
重要なのは、スクリプトは、ブラウザではなく、シェルを介して呼び出された場合にのみ機能するということです。ブラウザを使用すると、次のエラーが発生します。socket_create():ソケットを作成できません[1]:操作は許可されていません。ですから、ここで何かがうまくいかないのです。
グーグルとグーグルの後、apacheを介して呼び出されたときに同じスクリプトが機能しない理由を理解できません。CAP_NET_RAWをapache構成ファイルにも追加する必要がありますか?
これに関するアドバイスをいただければ幸いです。
ジェイソン