に最終更新
IP 型へのキャスト
IP 型は、IPv4 型と IPv6 型を含む IP アドレスの保存と処理に使用します。IPv4 は uint32、IPv6 は uint128 として保存されます。
IPv4 へのキャスト
文字列から
厳密モード
BNF 定義
<ipv4> ::= <whitespace>* <octet> "." <octet> "." <octet> "." <octet> <whitespace>*
<octet> ::= <digit> | <digit><digit> | <digit><digit><digit>
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
規則の説明
IPv4 アドレスは、ドットで区切られた 4 つの数値部分から構成されます(number.number.number.number)。例:192.168.1.1。各部分は 0 から 255 の範囲でなければなりません。数値の先頭にはゼロを付けることができます。アドレスの前後には、スペース、タブ、改行などの空白文字を任意の数だけ含めることができます。
形式が規則に適合しない場合は、エラーが報告されます。
例
| 入力文字列 | 解析結果 | 説明 |
|---|---|---|
| "192.168.1.1" | Success | 標準的な有効アドレス |
| "0.0.0.0" | Success | 最小値の境界 |
| "255.255.255.255" | Success | 最大値の境界 |
| "10.20.30.40" | Success | 一般的なアドレス |
| " 192.168.1.1 " | Success | 前後に空白文字を含められる |
| "192.168.01.1" | Success | 先頭のゼロが許可される(01 = 1) |
| "1.2.3" | Error | 3 つの部分しかない(4 つ必要) |
| "1.2.3.4.5" | Error | 5 つの部分がある(4 つ必要) |
| "256.0.0.1" | Error | 最初の部分が 255 を超える(256 は範囲外) |
| "1.300.2.3" | Error | 二番目の部分が 255 を超える |
| "1.2.3." | Error | 四番目の部分がない |
| ".1.2.3" | Error | 最初の部分がない |
| "1..2.3" | Error | 二番目の部分がない |
| "a.b.c.d" | Error | 数字以外の文字を含む |
| "1.2.+3.4" | Error | 符号 + は無効 |
非厳密モード
BNF 定義
<ipv4> ::= <whitespace>* <octet> "." <octet> "." <octet> "." <octet> <whitespace>*
<octet> ::= <digit> | <digit><digit> | <digit><digit><digit>
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
規則の説明
IPv4 アドレスは、ドットで区切られた 4 つの数値部分から構成されます(number.number.number.number)。例:192.168.1.1。各部分は 0 から 255 の範囲でなければなりません。数値の先頭にはゼロを付けることができます。アドレスの前後には、スペース、タブ、改行などの空白文字を任意の数だけ含めることができます。
形式が規則に適合しない場合は、null が返されます。
例
| 入力文字列 | 解析結果 | 説明 |
|---|---|---|
| "192.168.1.1" | Success | 標準的な有効アドレス |
| "0.0.0.0" | Success | 最小値の境界 |
| "255.255.255.255" | Success | 最大値の境界 |
| "10.20.30.40" | Success | 一般的なアドレス |
| " 192.168.1.1 " | Success | 前後に空白文字を含められる |
| "192.168.01.1" | Success | 先頭のゼロが許可される(01 = 1) |
| "1.2.3" | null | 3 つの部分しかない(4 つ必要) |
| "1.2.3.4.5" | null | 5 つの部分がある(4 つ必要) |
| "256.0.0.1" | null | 最初の部分が 255 を超える(256 は範囲外) |
| "1.300.2.3" | null | 二番目の部分が 255 を超える |
| "1.2.3." | null | 四番目の部分がない |
| ".1.2.3" | null | 最初の部分がない |
| "1..2.3" | null | 二番目の部分がない |
| "a.b.c.d" | null | 数字以外の文字を含む |
| "1.2.+3.4" | null | 符号 + は無効 |
IPv6 へのキャスト
文字列から
動作の変更
バージョン 4.0 より前の Doris では、IPv6 アドレスの形式に対する要件がより緩やかでした。例:
- 連続する複数のコロンを許可('1:1:::1' など)
- 実際には何も省略していない二重コロンを許可('1:1:1::1:1:1:1:1' など)
バージョン 4.0 以降、これら二つの標準外の形式は、厳密モードではエラーとなり、非厳密モードでは null が返されます。
厳密モード
BNF 定義
<ipv6> ::= <whitespace>* <ipv6-standard> <whitespace>*
| <whitespace>* <ipv6-compressed> <whitespace>*
| <whitespace>* <ipv6-ipv4-mapped> <whitespace>*
<ipv6-standard> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>
<h16> ::= <hexdigit>{1,4}
<hexdigit> ::= <digit> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
規則の説明
- 標準形式:コロンで区切られた 8 つの十六進数のグループで、各グループは 1~4 桁の十六進数で構成されます。例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 省略形式:
- 二重コロン(::)を使用して、連続する一つ以上のゼロのグループを表すことができます。
- 二重コロン(::)は、アドレス全体で一度しか使用できません。
- :: だけでも有効なアドレスで、すべてゼロを表します。
- 1:1:1::1:1:1:1:1 は、:: が連続するゼロを表していないため無効です。
- 次のアドレスはすべて有効で、同じアドレスを表します。
- 2001:0db8:0000:0000:0000:0000:1428:57ab
- 2001:0db8:0000:0000:0000::1428:57ab
- 2001:0db8:0:0:0:0:1428:57ab
- 2001:0db8:0::0:1428:57ab
- 2001:0db8::1428:57ab
- IPv4 マッピングアドレス:
- IPv6 アドレスの下位 32 ビット(最後の二つのグループ)には、IPv4 のドット区切り十進表記を使用できます。
- この形式は、通常、IPv4 アドレスから IPv6 アドレスへのマッピングを表すために使用します。
- 例:::ffff:192.168.89.9 は ::ffff:c0a8:5909 と同等です。
- アドレスの前後には、スペース、タブ、改行などの空白文字を任意の数だけ含めることができます。
- 十六進数の英字には、大文字(A-F)と小文字(a-f)のどちらも使用できます。
- IPv4 部分は IPv4 の規則に従う必要があり、各部分は 0 から 255 の範囲でなければなりません。
- アドレスの形式が上記の規則に適合しない場合は、エラーが報告されます。
例
| 入力文字列 | 解析結果 | 説明 |
|---|---|---|
| 2001:db8:85a3:0000:0000:8a2e:0370:7334 | Success | 標準的な有効アドレス |
| :: | Success | すべてゼロのアドレス |
| 2001:db8:: | Success | 省略形式を使用 |
| ::ffff:192.168.1.1 | Success | IPv4 マッピングアドレス |
| 2001:db8::1 | Success | 前後に空白文字を含められる |
| 2001:db8::1::2 | Error | 二重コロン(::)が二度出現する |
| 2001:db8:85a3:0000:0000:8a2e:0370:7334:1234 | Error | グループが 8 つを超える |
| 2001:db8:85a3:0000:8a2e:0370 | Error | 6 つのグループしかない(8 つ必要、または省略形式を使用) |
| 2001:db8:85g3:0000:0000:8a2e:0370:7334 | Error | 無効な十六進文字 'g' を含む |
| 2001:db8::ffff:192.168.1.260 | Error | IPv4 部分が範囲外(260 > 255) |
| 2001:db8::ffff:192.168..1 | Error | IPv4 部分の形式が無効(一つの部分が欠けている) |
| 2001:0db8:85a3:::8a2e:0370:7334 | Error | コロンが三つ連続する |
| 20001:db8::1 | Error | 最初のグループが 4 桁の十六進数を超える |
非厳密モード
BNF 定義
<ipv6> ::= <whitespace>* <ipv6-standard> <whitespace>*
| <whitespace>* <ipv6-compressed> <whitespace>*
| <whitespace>* <ipv6-ipv4-mapped> <whitespace>*
<ipv6-standard> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>
<h16> ::= <hexdigit>{1,4}
<hexdigit> ::= <digit> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
規則の説明
- 標準形式:コロンで区切られた 8 つの十六進数のグループで、各グループは 1~4 桁の十六進数で構成されます。例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 省略形式:
- 二重コロン(::)を使用して、連続する一つ以上のゼロのグループを表すことができます。
- 二重コロン(::)は、アドレス全体で一度しか使用できません。
- :: だけでも有効なアドレスで、すべてゼロを表します。
- 1:1:1::1:1:1:1:1 は、:: が連続するゼロを表していないため無効です。
- 次のアドレスはすべて有効で、同じアドレスを表します。
- 2001:0db8:0000:0000:0000:0000:1428:57ab
- 2001:0db8:0000:0000:0000::1428:57ab
- 2001:0db8:0:0:0:0:1428:57ab
- 2001:0db8:0::0:1428:57ab
- 2001:0db8::1428:57ab
- IPv4 マッピングアドレス:
- IPv6 アドレスの下位 32 ビット(最後の二つのグループ)には、IPv4 のドット区切り十進表記を使用できます。
- この形式は、通常、IPv4 アドレスから IPv6 アドレスへのマッピングを表すために使用します。
- 例:::ffff:192.168.89.9 は ::ffff:c0a8:5909 と同等です。
- アドレスの前後には、スペース、タブ、改行などの空白文字を任意の数だけ含めることができます。
- 十六進数の英字には、大文字(A-F)と小文字(a-f)のどちらも使用できます。
- IPv4 部分は IPv4 の規則に従う必要があり、各部分は 0 から 255 の範囲でなければなりません。
- アドレスの形式が上記の規則に適合しない場合は、null が返されます。
例
| 入力文字列 | 解析結果 | 説明 |
|---|---|---|
| 2001:db8:85a3:0000:0000:8a2e:0370:7334 | Success | 標準的な有効アドレス |
| :: | Success | すべてゼロのアドレス |
| 2001:db8:: | Success | 省略形式を使用 |
| ::ffff:192.168.1.1 | Success | IPv4 マッピングアドレス |
| 2001:db8::1 | Success | 前後に空白文字を含められる |
| 2001:db8::1::2 | null | 二重コロン(::)が二度出現する |
| 2001:db8:85a3:0000:0000:8a2e:0370:7334:1234 | null | グループが 8 つを超える |
| 2001:db8:85a3:0000:8a2e:0370 | null | 6 つのグループしかない(8 つ必要、または省略形式を使用) |
| 2001:db8:85g3:0000:0000:8a2e:0370:7334 | null | 無効な十六進文字 'g' を含む |
| 2001:db8::ffff:192.168.1.260 | null | IPv4 部分が範囲外(260 > 255) |
| 2001:db8::ffff:192.168..1 | null | IPv4 部分の形式が無効(一つの部分が欠けている) |
| 2001:0db8:85a3:::8a2e:0370:7334 | null | コロンが三つ連続する |
| 20001:db8::1 | null | 最初のグループが 4 桁の十六進数を超える |
IPv4 から
すべての IPv4 アドレスは IPv6 に変換できます。変換は常に成功し、厳密モードと非厳密モードで動作は同じです。
| 入力 IPv4 | 変換後の IPv6 |
|---|---|
| 192.168.0.0 | ::ffff:192.168.0.0 |
| 0.0.0.0 | ::ffff:0.0.0.0 |