ICMP(4) | FreeBSD Kernel Interfaces Manual | ICMP(4) |
名称
icmp — インターネットコントロールメッセージプロトコル書式
#include < sys/types.h>#include < sys/socket.h>
#include < netinet/in.h>
int
socket( AF_INET, SOCK_RAW, proto);
解説
ICMP は IP とインターネットプロトコルファミリによって使用されるエラーとコントロールメッセージプロトコルです。それはネットワークモニタリングと診断機能のために“raw (生の) ソケット”を介してアクセスできます。 ICMP ソケットを作成するためのソケット呼び出しへの proto パラメータは、 getprotobyname(3) から得られます。 ICMP ソケットはコネクションレスで、通常 sendto(2) と recvfrom(2) 呼び出しと共に使用されます。しかしながら、 connect(2) 呼び出しは将来のパケット (その場合には read(2) または recv(2) および write(2) または send(2) システムコールが使用できます) のために宛先 (終点) を固定するために使用できます。発信パケットは、(宛先アドレスに基づいて) 自動的にそれらに IP ヘッダを先頭に追加します。着信パケットはそのままの IP ヘッダとオプションで受信されます。
タイプ
ICMP メッセージは、ICMP ヘッダに存在するタイプとコードフィールドに従って、分類されます。タイプとコードのための省略形は、 pf.conf(5) の規則で使用されます。次のタイプが定義されています:番号 | 省略形 | 説明 |
0 | echorep | エコー応答 |
3 | unreach | 宛先到達不可能 |
4 | squench | パケット損失, 減速 |
5 | redir | より短いルートが存在 |
6 | althost | 代替ホストアドレス |
8 | echoreq | エコー要求 |
9 | routeradv | ルータ通知 |
10 | routersol | ルータ懇願 |
11 | timex | 時間超過 |
12 | paramprob | 不正 IP ヘッダ |
13 | timereq | タイムスタンプ要求 |
14 | timerep | タイムスタンプ応答 |
15 | inforeq | 情報要求 |
16 | inforep | 情報応答 |
17 | maskreq | アドレスマスク要求 |
18 | maskrep | アドレスマスク応答 |
30 | trace | トレースルート |
31 | dataconv | データ変換問題 |
32 | mobredir | モバイルホストリダイレクション |
33 | ipv6-where | IPv6 where-are-you |
34 | ipv6-here | IPv6 i-am-here |
35 | mobregreq | モバイル登録要求 |
36 | mobregrep | モバイル登録応答 |
39 | skip | スキップ |
40 | photuris | Photuris |
次のコードが定義されています:
番号 | 省略形 | タイプ | 説明 |
0 | net-unr | unreach | ネットワーク不到達 |
1 | host-unr | unreach | ホスト不到達 |
2 | proto-unr | unreach | プロトコル不到達 |
3 | port-unr | unreach | ポート不到達 |
4 | needfrag | unreach | 断片化が必要だが、DF ビット設定 |
5 | srcfail | unreach | 発信元ルーティングは失敗 |
6 | net-unk | unreach | 未知のネットワーク |
7 | host-unk | unreach | 未知のホスト |
8 | isolate | unreach | 隔離されたホスト |
9 | net-prohib | unreach | ネットワーク管理禁止 |
10 | host-prohib | unreach | ホスト管理禁止 |
11 | net-tos | unreach | ネットワークの不正 TOS |
12 | host-tos | unreach | ホストの不正 TOS |
13 | filter-prohib | unreach | 禁止されたアクセス |
14 | host-preced | unreach | 優先違反 |
15 | cutoff-preced | unreach | 優先遮断 |
0 | redir-net | redir | ネットワークのより短いルート |
1 | redir-host | redir | ホストのより短いルート |
2 | redir-tos-net | redir | TOS とネットワークのより短いルート |
3 | redir-tos-host | redir | TOS とホストのより短いルート |
0 | normal-adv | routeradv | 通常通知 |
16 | common-adv | routeradv | 選択通知 |
0 | transit | timex | 転送時の超過時間 |
1 | reassemb | timex | 再構築時の超過時間 |
0 | badhead | paramprob | 不正オプションポインタ |
1 | optmiss | paramprob | オプション不足 |
2 | badlen | paramprob | 不正長さ |
1 | unknown-ind | photuris | 未知のセキュリティインデックス |
2 | auth-fail | photuris | 認証失敗 |
3 | decrypt-fail | photuris | 暗号解読失敗 |
MIB 変数
ICMP プロトコルは sysctl(3) MIB の net.inet.icmp ブランチでいくつかの変数を実装しています。- maskrepl
- ( ブール値) ICMP Address Mask Request パケットへの応答を有効/無効にする。デフォルトは偽です。
- maskfake
- ( 符号なし整数) maskrepl が設定されて、この値が 0 でないとき、システムが ICMP Address Mask Request パケットに応答するとき、それは実際のアドレスマスクの代わりに使用されます。デフォルトは 0 です。
- icmplim
- ( 整数) パケット/秒で ICMP 応答のための帯域幅の制限です。 icmplim_output が 0 でないときに使用されます。デフォルトは 200 です。
- icmplim_output
- ( ブール値) ICMP 応答の帯域幅制限を有効/無効にします。デフォルトは真です。
- drop_redirect
- ( ブール値) ICMP Redirect パケットの落下を有効/無効にする。デフォルトは偽です。
- log_redirect
- ( ブール値) ICMP Redirect パケットのログを有効/無効にする。デフォルトは偽です。
- bmcastecho
- ( ブール値) ブロードキャストまたはマルチキャストを通して受信された ICMP 応答を有効/無効にする。デフォルトは偽です。
- reply_src
- ( 文字列) インタフェース名は直接アドレス指定されないパケットの応答で ICMP 応答発信元 (始点) で使用されます。デフォルトで通常の発信元 (始点) 選択を継続します。
- reply_from_interface
- ( ブール値) 直接我々が対処できない、パケットへの応答を通り抜けるインタフェースの IP アドレスを使用します。有効にされるなら、この規則は、他のすべての前に処理されます。デフォルトで、通常のソース選択を続行します。外部のトレースルートが、ことによると異なったリターンパスの代わりに取られる実際のパスを示すので、このオプションを有効にすることはルータで特に役に立ちます。
- quotelen
- ( 整数) ICMP 応答で引用 (クォート) するオリジナルのパケットからのバイトの数。この数は、(RFC792 で) 少なくとも 8 バイトと多くても ICMP 応答 mbuf に残っている最大の空間となるように内部的に強制されます。
エラー
ソケット操作は失敗すれば、次のエラーのうちの 1 つを返します:- [ EISCONN]
- 既に接続されているソケットで接続を確立しようとする場合、または宛先 (終点) アドレスを指定してデータグラムを送ろうとする場合です。そして、ソケットは既に接続されています。
- [ ENOTCONN]
- 宛先 (終点) アドレスは指定せずに、データグラムを送信しようとする場合です。また、ソケットは接続されていません。
- [ ENOBUFS]
- システムが内部データ構造体のためのメモリを使い果たす場合です。
- [ EADDRNOTAVAIL]
- ネットワークインタフェースが存在しないネットワークアドレスでソケットを作成しようとした場合です。
歴史
icmp プロトコルは、 4.3BSD で登場しました。February 9, 2007 | FreeBSD |