スポンサーリンク

IPSEND

名称
解説
文法
コマンド
IPv4
IPv4 のオプション
TCP
TCP オプション
UDP
ICMP
データ
ICMP タイプ
関連ファイル
関連項目

名称

ipsend − IP パケット記述言語

解説

ipsend プログラムは、-L オプションが付くと、以下の文法に適合するテキス トファイルを入力として期待します。この文法の目的は、任意の方法で IP パ ケッ トを指定可能とすることで、 IP パケットを任意の方法でカプセル化でき るようにすることです。

文法

line ::= iface | arp | send | defrouter | ipv4line .

iface ::= ifhdr "{" ifaceopts "}" ";" .
ifhdr ::= "interface" | "iface" .
ifaceopts ::= "ifname" name | "mtu" mtu | "v4addr" ipaddr |

"eaddr" eaddr .

send ::= "send" ";" | "send" "{" sendbodyopts "}" ";" .
sendbodyopts ::= sendbody [ sendbodyopts ] .
sendbody ::= "ifname" name | "via" ipaddr .

defrouter ::= "router" ipaddr .

arp ::= "arp" "{" arpbodyopts "}" ";" .
arpbodyopts ::= arpbody [ arpbodyopts ] .
arpbody ::= "v4addr" ipaddr | "eaddr" eaddr .

bodyline ::= ipv4line | tcpline | udpline | icmpline | dataline .

ipv4line ::= "ipv4" "{" ipv4bodyopts "}" ";" .
ipv4bodyopts ::= ipv4body [ ipv4bodyopts ] | bodyline .
ipv4body ::= "proto" protocol | "src" ipaddr | "dst" ipaddr |

"off" number | "v" number | "hl" number| "id" number |

"ttl" number | "tos" number | "sum" number | "len" number |

"opt" "{" ipv4optlist "}" ";" .

ipv4optlist ::= ipv4option [ ipv4optlist ] .
ipv4optlist = "nop" | "rr" | "zsu" | "mtup" | "mtur" | "encode" | "ts" |

"tr" | "sec" | "lsrr" | "e-sec" | "cipso" | "satid" |

"ssrr" | "addext" | "visa" | "imitd" | "eip" | "finn" |

"secclass" ipv4secclass.

ipv4secclass := "unclass" | "confid" | "reserv-1" | "reserv-2" |

"reserv-3" | "reserv-4" | "secret" | "topsecret" .

tcpline ::= "tcp" "{" tcpbodyopts "}" ";" .
tcpbodyopts ::= tcpbody [ tcpbodyopts ] | bodyline .
tcpbody ::= "sport" port | "dport" port | "seq" number | "ack" number |

"off" number | "urp" number | "win" number | "sum" number |

"flags" tcpflags | data .

udpline ::= "udp" "{" udpbodyopts "}" ";" .
udpbodyopts ::= udpbody [ udpbodyopts ] | bodyline .
udpbody ::= "sport" port | "dport" port | "len" number | "sum" number |

data .

icmpline ::= "icmp" "{" icmpbodyopts "}" ";" .
icmpbodyopts ::= icmpbody [ icmpbodyopts ] | bodyline .
icmpbody ::= "type" icmptype [ "code" icmpcode ] .
icmptype ::= "echorep" | "echorep" "{" echoopts "}" ";" | "unreach" |

"unreach" "{" unreachtype "}" ";" | "squench" | "redir" |

"redir" "{" redirtype "}" ";" | "echo" "{" echoopts "}" ";" |

"echo" | "routerad" | "routersol" | "timex" |

"timex" "{" timextype "}" ";" | "paramprob" |

"paramprob" "{" parapptype "}" ";" | "timest" | "timestrep" |

"inforeq" | "inforep" | "maskreq" | "maskrep" .

echoopts ::= echoopts [ icmpechoopts ] .
unreachtype ::= "net-unr" | "host-unr" | "proto-unr" | "port-unr" |

"needfrag" | "srcfail" | "net-unk" | "host-unk" | "isolate" |

"net-prohib" | "host-prohib" | "net-tos" | "host-tos" |

"filter-prohib" | "host-preced" | "cutoff-preced" .

redirtype ::= "net-redir" | "host-redir" | "tos-net-redir" |

"tos-host-redir" .

timextype ::= "intrans" | "reass" .
paramptype ::= "optabsent" .

data

::= "data" "{" databodyopts "}" ";" .

databodyopts ::= "len" number | "value" string | "file" filename .

icmpechoopts ::= "icmpseq" number | "icmpid" number .

コマンド

パケットの送信や、パケットの定義の前に、送信する際に用いるインタ フェー スを記述する必要があります。

interface

こ れは、ネットワークインタフェースを記述するために用います。こ こに含まれる記述では、オペレーティングシステムが採用している 実 際のコンフィギュレーションと一致させる必要はありません。

send

これは、実際にネットワーク越しにパケットを送信するために 用います。終点が指定されない場合、そのネットワークに、ルー ティ ングなしで終点に向けて直接パケットを送出します。

router

これは、ipsend が使うデフォルトルータを、カーネルが扱う デフォルト経路とは別に指定します。

ipv4

これは (バージョン 4 の) IP パケットを記述します。IP ヘッ ダ フィールドを、オプションも含めて、さらに先のプロトコルヘッダ を含むデータセクションを続けて指定することも出来ます。

IPv4

hl <number>

これは、手動で IP ヘッダ長を指定します (IP オプションの存在によ り自動的に修正されます。デフォルトは 5)。

v <number>

IP バージョンを設定します。デフォルトは 4 です。

tos <number>

こ れ は、 サービスの型 (Type Of Service, TOS) を設定します。デ フォルトは 0 です。

len <number>

IP パケットの長さを手動で指定します。データやプロトコルヘッダを 収容できるように、長さは自動的に調整されます。

off <number>

これは、IP パケットのフラグメントオフセットフィールドの値を設定 します。デフォルトは 0 です。

ttl <number>

これは IP ヘッダの生存時間 (Time To Live, TTL) フィールドを設定 します。デフォルトは 60 です。

proto <protocol>

こ れ は IP ヘッダのプロトコルフィールドを設定します。protocol は、 /etc/protocols に存在する数字または名前が使えます。

sum

手動で IP ヘッダのチェックサムを設定します。これを設定しな い (0) ままだと、送信前に計算されます。

src

手動で IP ヘッダの始点アドレスを指定します。これを設定しな いままだと、ホストの IP アドレスをデフォルトとします。

dst

これは、IP パケットの終点を設定し ま す。 デ フォ ル ト は 0.0.0.0 です。

opt

これは、IP ヘッダの IP オプションを指定するために用いま す。

tcp

これは、TCP プロトコルヘッダが後続することを示すために用い ま す。TCP ヘッダのオプションについては、TCP を参照してくださ い。

udp

これは、UDP プロトコルヘッダが後続することを示すために用い ま す。UDP ヘッダのオプションについては、UDP の節を参照してくだ さい。

icmp

これは、ICMP プロトコルヘッダが後続することを示すために用 い ます。ICMP ヘッダのオプションについては、ICMP の節を参考にし てください。

data

これは、IP パケットに生データが含まれることを示すために用 います。指定可能なオプションの詳細については、データ の節を参考 にして下さい。

IPv4 のオプション

これらのキーワードは、対応する IP オプションを IP ヘッダに追加すべき こ とを表します (このときヘッダ長フィールドは適切に調節されます)。

nop

無動作 (No Operation) [RFC 791] (埋め草として使います)。

rr <number>

経 路記録 (Record Router) [RFC 791]。与えられた番号は、情報を保 持するのに用いる領域の バイト 数を指定します。ちゃんと動作さ せ るには、この値は 4 の倍数に指定しておく必要があります。

zsu

測定実験 (Experimental Measurement)。

mtup [RFC 1191].

最 大 転 送 単 位 (Maximum Transmission Unit, MTU) 探査 (MTU Probe)。

mtur [RFC 1191].

最大転送単位レディ (MTU Ready)。

encode

ts

タイムスタンプ (Timestamp) [RFC 791]。

tr

経路追跡 (Traceroute) [RFC 1393]。

sec-class <security-level>, sec

セキュリティ (Security) [RFC1108]。このオプションはパケットのセ キュリティレベルを指定します。 sec はセキュリティオプションの枠 組みを設定しますが、 sec-class を指定しないとレベルは設定されな いままとなります。

lsrr <ip-address>

厳密でない始点経路制御 (Loose Source Route) [RFC 791]。

e-sec

拡張セキュリティ (Extended Security) [RFC 1108]。

cipso

商用セキュリティ (Commercial Security)。

satid

ストリーム ID [RFC 791]。

ssrr <ip-address>

厳密な始点経路制御 [RFC 791]。

addext

アドレス拡張 (Address Extension)。

visa

実験的アクセス制御 (Experimental Access Control)。

imitd

IMI 流量記述子 (IMI Traffic Descriptor)。

eip

[RFC 1358]。

finn

実験的フロー制御 (Experimental Flow Control)。

TCP

sport <port>

始点ポート番号を与えられた番号/名前で設定します。デフォルトは 0 です。

dport <port>

終点ポート番号を与えられた番号/名前で設定します。デフォルトは 0 です。

seq <number>

シーケンス番号を指定した数で設定します。デフォルトは 0 です。

ack <number>

応答番号を指定した数で設定します。デフォルトは 0 です。

off <number>

デー タ 先 頭からのオフセット値を指定した数で設定します。つまり TCP ヘッダの大きさを意味します。TCP オプションが含まれる場 合、 この値は自動的に修正されます。デフォルトは 5 です。

urp <number>

緊 急データポインタの値を指定した数で設定します。デフォルトは 0 です。

win <number>

TCP ウィンドウの大きさを指定した数で設定します。デフォ ル ト は 4096 です。

sum <number>

TCP 疑似ヘッダとデータに対するチェックサムを手動で指定します。 特に設定しなければ、デフォルトの 0 になり、自動的に計算さ れ ま す。

flags <tcp-flags>

指定したフラグに一致する TCP フラグフィールドが設定されます。有 効なフラグは、"S" (SYN), "A" (ACK), "R" (RST), "F" (FIN), "U" (URG), "P" (PUSH) です。

opt

TCP オプションが後続することを示します。TCP オプションを TCP ヘッダに追加する際には、off フィールドが一致するように更 新 されます。

data

これ以後がデータセクションであり、ヘッダの後ろに追加すべ き生データが含まれることを示します。

TCP オプション

TCP ヘッダには、いくつかのヘッダオプションを追加することが可 能 で す。 ヘッ ダ の大きさが変わるにつれ TCP ヘッダオフセットは自動的に更新されま す。有効なオプションは、nop 無動作(No Operation), eol オプションリス ト の 終 り(End Of (option) List), mss [ size ] 最大セグメント長 (Maximum Segment Size - これはデータを含むパケットの受信可能な最大長を設定 し ま す), wscale ウィ ン ド ウ ス ケー ル(Window Scale), ts タイムスタン プ(Timestamp) です。

UDP

sport <port>

始点ポート番号を与えられた番号/名前で設定します。デフォルトは 0 です。

dport <port>

終点ポート番号を与えられた番号/名前で設定します。デフォルトは 0 です。

len <number>

UDP ヘッダとデータの長さを手動で指定します。特に設定し な け れ ば、 今あるヘッダと今あるデータに合致するように自動的に修正され ます。

sum <number>

UDP 疑似ヘッダとデータに対するチェックサムを手動で指定しま す。 特 に 設定しなければ、デフォルトの 0 になり、自動的に計算されま す。

data

これ以後がデータセクションであり、ヘッダの後ろに追加す べ き生データが含まれることを示します。

ICMP

type <icmptype>

こ れは icmptype タグにしたがって ICMP タイプを設定します。これ は数値または認識されるタグのいずれかです (認識されるタグ名の 一 覧については、ICMP タイプ の節を参照のこと)。

code <icmpcode>

ICMP コードを設定します。

data

これ以後がデータセクションであり、ヘッダの後ろに追加すべ き生データが含まれることを示します。

データ

以下に示すものは、それぞれ異なったやり方でパケットを拡張します。 len は ( 内 容 は 付加せずに) 単に長さを増やすだけです。value は文字列を使いま す。file はファイルを使います。

len <number>

パケットの長さを number バイト拡張します (特定のデータで埋め る ことはしません)。

value <string>

与 えられた文字列を今あるパケットのデータとして追加することを示 します。文字列は文字もしくは数値の連続したリスト (空白文字を は さみません)、もしくは "’ で区切られています (この場合、たとえ \ したとしても、これらの文字は含みません)。文字 \ は 後続の文 字( も しくは 8 進数)といっしょにして、C 言語のエスケープ値と解釈さ れます。

file <filename>

指定したファイルからデータを読み込み、今あるパケットに追加し ま す。その結果の全長が 64k を越える場合、エラーとなります。

ICMP タイプ

echorep

エコー応答 (Echo Reply)。

unreach [ unreachable-code ]

汎 用の到達不可能エラー。これは、ネットワークをまたいでパケット を伝送しようとしているうちにエラーが発生し、終点に到達できな い こ と を 示します。到達不可能コード(unreachable-code)の名前は、 net-unr ネットワーク到達不可能 (network unreachable), host-unr ホスト到達不可能 (host unreachable), proto-unr プロトコル到達不 可能 (protocol unreachable), port-unr ポート到達不 可 能 (port unreachable), needfrag, srcfail 始点経路制御失敗 (source route failed), net-unk ネットワーク不明 (network unknown), host-unk ホスト不明 (host unknown), isolate, net-prohib 管理上の理由によ りネットワーク接触禁止, host-prohib 管理上の理由によりホスト 接 触禁止, net-tos 指定した TOS でネットワーク到達不可能, host-tos 指定した TOS でホスト到達不可能, filter-prohib パケットフィルタ により禁止されたパケット, host-preced, cutoff-preced です。

squench

始点抑制 (Source Quence)。

redir [ redirect-code ]

( 経路の) 方向転換 (Redirect (routing))。パケットを送付するため に選択された経路が最適といえないので、パケットの送信側が他の 経 路 を経路指定すべきであることを表すために用います。方向転換コー ド (redirect-code) の名前は、 net-redir ネットワークに到達す る た め の 方 向 転換, host-redir ホストに到達するための方向転換, tos-net-redir 与えられた TOS でネットワークに到達するための方向 転 換, tos-host-redir 与えられた TOS でホストに到達するための方 向転換です。

echo

エコー。

routerad

ルータの公示 (Router advertisment)。

routersol

ルータの請求 (Router solicitation)。

timex [ timexceed-code ]

全体時間超過 (Time Exceeded)。道程が長過ぎて (つまり、ttl が 0 に なってしまい) パケットが終点に到達できなかったことを表すため に用います。有効なコードの名前は、intrans, reass 与えられた時間 内でフラグメントからパケットの再構成ができなかった、です。

paramprob [ paramprob-code ]

パ ラメータの問題。パラメータ問題のコードの名前で利用できるもの はひとつだけで、optabsent です。

timest

タイムスタンプ要求。

timestrep [ { timestamp-code } ]

タイムスタンプ応答。タイムスタンプ応答の中で、以下の値を提供 す ることができます。rtime, otime, ttime

inforeq

情報要求。

inforep

情報応答。

maskreq

アドレスマスク要求。

maskrep

アドレスマスク応答。

関連ファイル

/etc/hosts
/etc/protocols
/etc/services

関連項目

ipsend(1), iptest(1), hosts(5), protocols(5), services(5)

スポンサーリンク