IPSEND(5)

名称
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)