メインコンテンツまでスキップ
に最終更新

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"Error3 つの部分しかない(4 つ必要)
"1.2.3.4.5"Error5 つの部分がある(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"null3 つの部分しかない(4 つ必要)
"1.2.3.4.5"null5 つの部分がある(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"
規則の説明​
  1. 標準形式:コロンで区切られた 8 つの十六進数のグループで、各グループは 1~4 桁の十六進数で構成されます。例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 省略形式:
  • 二重コロン(::)を使用して、連続する一つ以上のゼロのグループを表すことができます。
  • 二重コロン(::)は、アドレス全体で一度しか使用できません。
  • :: だけでも有効なアドレスで、すべてゼロを表します。
  • 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
  1. IPv4 マッピングアドレス:
  • IPv6 アドレスの下位 32 ビット(最後の二つのグループ)には、IPv4 のドット区切り十進表記を使用できます。
  • この形式は、通常、IPv4 アドレスから IPv6 アドレスへのマッピングを表すために使用します。
  • 例:::ffff:192.168.89.9 は ::ffff:c0a8:5909 と同等です。
  1. アドレスの前後には、スペース、タブ、改行などの空白文字を任意の数だけ含めることができます。
  2. 十六進数の英字には、大文字(A-F)と小文字(a-f)のどちらも使用できます。
  3. IPv4 部分は IPv4 の規則に従う必要があり、各部分は 0 から 255 の範囲でなければなりません。
  4. アドレスの形式が上記の規則に適合しない場合は、エラーが報告されます。
例​
入力文字列解析結果説明
2001:db8:85a3:0000:0000:8a2e:0370:7334Success標準的な有効アドレス
::Successすべてゼロのアドレス
2001:db8::Success省略形式を使用
::ffff:192.168.1.1SuccessIPv4 マッピングアドレス
2001:db8::1Success前後に空白文字を含められる
2001:db8::1::2Error二重コロン(::)が二度出現する
2001:db8:85a3:0000:0000:8a2e:0370:7334:1234Errorグループが 8 つを超える
2001:db8:85a3:0000:8a2e:0370Error6 つのグループしかない(8 つ必要、または省略形式を使用)
2001:db8:85g3:0000:0000:8a2e:0370:7334Error無効な十六進文字 'g' を含む
2001:db8::ffff:192.168.1.260ErrorIPv4 部分が範囲外(260 > 255)
2001:db8::ffff:192.168..1ErrorIPv4 部分の形式が無効(一つの部分が欠けている)
2001:0db8:85a3:::8a2e:0370:7334Errorコロンが三つ連続する
20001:db8::1Error最初のグループが 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"
規則の説明​
  1. 標準形式:コロンで区切られた 8 つの十六進数のグループで、各グループは 1~4 桁の十六進数で構成されます。例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 省略形式:
  • 二重コロン(::)を使用して、連続する一つ以上のゼロのグループを表すことができます。
  • 二重コロン(::)は、アドレス全体で一度しか使用できません。
  • :: だけでも有効なアドレスで、すべてゼロを表します。
  • 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
  1. IPv4 マッピングアドレス:
  • IPv6 アドレスの下位 32 ビット(最後の二つのグループ)には、IPv4 のドット区切り十進表記を使用できます。
  • この形式は、通常、IPv4 アドレスから IPv6 アドレスへのマッピングを表すために使用します。
  • 例:::ffff:192.168.89.9 は ::ffff:c0a8:5909 と同等です。
  1. アドレスの前後には、スペース、タブ、改行などの空白文字を任意の数だけ含めることができます。
  2. 十六進数の英字には、大文字(A-F)と小文字(a-f)のどちらも使用できます。
  3. IPv4 部分は IPv4 の規則に従う必要があり、各部分は 0 から 255 の範囲でなければなりません。
  4. アドレスの形式が上記の規則に適合しない場合は、null が返されます。
例​
入力文字列解析結果説明
2001:db8:85a3:0000:0000:8a2e:0370:7334Success標準的な有効アドレス
::Successすべてゼロのアドレス
2001:db8::Success省略形式を使用
::ffff:192.168.1.1SuccessIPv4 マッピングアドレス
2001:db8::1Success前後に空白文字を含められる
2001:db8::1::2null二重コロン(::)が二度出現する
2001:db8:85a3:0000:0000:8a2e:0370:7334:1234nullグループが 8 つを超える
2001:db8:85a3:0000:8a2e:0370null6 つのグループしかない(8 つ必要、または省略形式を使用)
2001:db8:85g3:0000:0000:8a2e:0370:7334null無効な十六進文字 'g' を含む
2001:db8::ffff:192.168.1.260nullIPv4 部分が範囲外(260 > 255)
2001:db8::ffff:192.168..1nullIPv4 部分の形式が無効(一つの部分が欠けている)
2001:0db8:85a3:::8a2e:0370:7334nullコロンが三つ連続する
20001:db8::1null最初のグループが 4 桁の十六進数を超える

IPv4 から​

すべての IPv4 アドレスは IPv6 に変換できます。変換は常に成功し、厳密モードと非厳密モードで動作は同じです。

入力 IPv4変換後の IPv6
192.168.0.0::ffff:192.168.0.0
0.0.0.0::ffff:0.0.0.0