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 "}"
";" . defrouter ::= "router" ipaddr . arp ::= "arp" "{" arpbodyopts
"}" ";" . bodyline ::= ipv4line | tcpline | udpline | icmpline | dataline . ipv4line ::= "ipv4" "{" ipv4bodyopts
"}" ";" . |
"off" number | "v" number | "hl" number| "id" number | |
|
"ttl" number | "tos" number | "sum" number | "len" number | |
|
"opt" "{" ipv4optlist "}" ";" . |
ipv4optlist ::= ipv4option [ ipv4optlist ] . |
"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
"}" ";" . |
"off" number | "urp" number | "win" number | "sum" number | |
|
"flags" tcpflags | data . |
udpline ::= "udp" "{" udpbodyopts
"}" ";" . |
data . |
icmpline ::= "icmp" "{" icmpbodyopts
"}" ";" . |
"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 ] . |
"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"
. |
data |
::= "data" "{" databodyopts "}" ";" . |
databodyopts ::= "len" number | "value" string | "file" filename . icmpechoopts ::= "icmpseq" number | "icmpid" number . |
パケットの送信や、パケットの定義の前に、送信する際に用いるインタ フェー スを記述する必要があります。 |
interface |
こ れは、ネットワークインタフェースを記述するために用います。こ こに含まれる記述では、オペレーティングシステムが採用している 実 際のコンフィギュレーションと一致させる必要はありません。 |
send |
これは、実際にネットワーク越しにパケットを送信するために 用います。終点が指定されない場合、そのネットワークに、ルー ティ ングなしで終点に向けて直接パケットを送出します。 |
||
router |
これは、ipsend が使うデフォルトルータを、カーネルが扱う デフォルト経路とは別に指定します。 |
||
ipv4 |
これは (バージョン 4 の) IP パケットを記述します。IP ヘッ ダ フィールドを、オプションも含めて、さらに先のプロトコルヘッダ を含むデータセクションを続けて指定することも出来ます。 |
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 パケットに生データが含まれることを示すために用 います。指定可能なオプションの詳細については、データ の節を参考 にして下さい。 |
これらのキーワードは、対応する 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)。 |
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 ヘッダオフセットは自動的に更新されま す。有効なオプションは、nop 無動作(No Operation), eol オプションリス ト の 終 り(End Of (option) List), mss [ size ] 最大セグメント長 (Maximum Segment Size - これはデータを含むパケットの受信可能な最大長を設定 し ま す), wscale ウィ ン ド ウ ス ケー ル(Window Scale), ts タイムスタン プ(Timestamp) です。 |
sport <port> |
始点ポート番号を与えられた番号/名前で設定します。デフォルトは 0 です。 |
dport <port> |
終点ポート番号を与えられた番号/名前で設定します。デフォルトは 0 です。 |
len <number> |
UDP ヘッダとデータの長さを手動で指定します。特に設定し な け れ ば、 今あるヘッダと今あるデータに合致するように自動的に修正され ます。 |
sum <number> |
UDP 疑似ヘッダとデータに対するチェックサムを手動で指定しま す。 特 に 設定しなければ、デフォルトの 0 になり、自動的に計算されま す。 |
data |
これ以後がデータセクションであり、ヘッダの後ろに追加す べ き生データが含まれることを示します。 |
type <icmptype> |
こ れは icmptype タグにしたがって ICMP タイプを設定します。これ は数値または認識されるタグのいずれかです (認識されるタグ名の 一 覧については、ICMP タイプ の節を参照のこと)。 |
code <icmpcode> |
ICMP コードを設定します。 |
data |
これ以後がデータセクションであり、ヘッダの後ろに追加すべ き生データが含まれることを示します。 |
以下に示すものは、それぞれ異なったやり方でパケットを拡張します。 len は ( 内 容 は 付加せずに) 単に長さを増やすだけです。value は文字列を使いま す。file はファイルを使います。 |
len <number> |
パケットの長さを number バイト拡張します (特定のデータで埋め る ことはしません)。 |
value <string> |
与 えられた文字列を今あるパケットのデータとして追加することを示 します。文字列は文字もしくは数値の連続したリスト (空白文字を は さみません)、もしくは "’ で区切られています (この場合、たとえ \ したとしても、これらの文字は含みません)。文字 \ は 後続の文 字( も しくは 8 進数)といっしょにして、C 言語のエスケープ値と解釈さ れます。 |
file <filename> |
指定したファイルからデータを読み込み、今あるパケットに追加し ま す。その結果の全長が 64k を越える場合、エラーとなります。 |
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 |