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
    이것은, 네트워크 인터페이스를 기술하기 위해서 이용합니다. 여기에 포함되는 기술에서는, operating system가 채용하고 있는 실제의 배치와 일치시킬 필요는 없습니다.

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 패킷의 fragment 오프셋(offset) 필드의 값을 설정합니다. 디폴트는 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]. 주어진 번호는, 정보를 보관 유지하는데 이용하는 area의 바이트 수를 지정합니다. 분명하게 동작시키려면 , 이 값은 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
    실험적 flow control (Experimental Flow Control).

TCP

sport <port>
    시점 포트 번호가 주어진 번호/이름으로 설정합니다. 디폴트는 0 입니다.

dport <port>
    종점 포트 번호가 주어진 번호/이름으로 설정합니다. 디폴트는 0 입니다.

seq <number>
    순차 순서 번호를 지정한 수로 설정합니다. 디폴트는 0 입니다.

ack <number>
    응답 번호를 지정한 수로 설정합니다. 디폴트는 0 입니다.

off <number>
    데이터 선두로부터의 오프셋(offset)치를 지정한 수로 설정합니다. 즉 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 헤더 오프셋(offset)는 자동적으로 갱신됩니다. 유효한 옵션은, nop 무동작(No Operation), eol 옵션 리스트의 끝(End Of (option) List), mss [ size ] 최대 세그먼트(segment)장 (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 주어진 시간내에 fragment로부터 패킷의 재구성을 할 수 없었다, 입니다.

paramprob [ paramprob-code ]
    파라미터의 문제. 파라미터 문제의 코드의 이름으로 이용할 수 있는 것은 하나 만으로, optabsent 입니다.

timest
    타임 스탬프 요구.

timestrep [ { timestamp-code } ]
    타임 스탬프 응답. 타임 스탬프 응답 중(안)에서, 이하의 값을 제공하는 것이 할 수 있습니다. rtime, otime, ttime.

inforeq
    정보 요구.

inforep
    정보 응답.

maskreq
    address mask 요구.

maskrep
    address mask 응답.

관련 파일
/etc/hosts
/etc/protocols
/etc/services

관련 항목
ipsend(1), iptest(1), hosts(5), protocols(5), services(5)