IPAddress - スコープ対象、グローバル

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:26分
  • IPAddress API には、ルーティング可能、ユニキャスト、マルチキャスト、パブリック、予約済みなど、指定された IP アドレスのさまざまな状態をチェックできるメソッドが用意されています。また、IP アドレスの正規形式 (短縮/標準) 形式と拡張形式を取得することもできます。

    SNC グローバル名前空間のグローバル IPAddress クラスとその関連メソッドにアクセスします。

    この API では、静的メソッドと非静的メソッドがあります。isV4() メソッドと isV6() メソッドは、静的実装と非静的実装の両方を提供します。非静的メソッドの利点は、IPAddress オブジェクトをインスタンス化するために IPAddress() メソッドを呼び出す必要がないことです。

    IPAddress:IPAddress(文字列 ipAddress)

    指定された IP アドレスの IPAddress オブジェクトをインスタンス化します。

    表 : 1. パラメーター
    名前 タイプ 説明
    ipAddress 文字列 IPAddress オブジェクトを作成する IP アドレス。

    次のコード例は、非静的 IPAddress メソッドを呼び出すときに IPAddress コンストラクターを呼び出す方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
    
      var ip = grDiscover.getValue('network_ip');
      var ip2 = gs.getSession().getClientIP().toString();
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + ip2);
      gs.info("ip address 1 is routable?: " + new SNC.IPAddress(ip).isRoutable());
      gs.info("ip address 2 is routable?: " + new SNC.IPAddress(ip2).isRoutable());
    }

    IPAddress - canonicalize(String ipAddress)

    アドレスからゼロのパディングを削除して、指定された IP アドレスの正規 (短縮/標準) 形式を返します。

    たとえば、IPv6 アドレス「0000:0000:0000:0000:0000:0000:0000:0000:0001」の正規形式は「::1」です。IPv4 アドレス「192.168.001.002」の正規形式は「192.268.1.2」です。

    注:
    これは静的な方法です。
    表 : 2. パラメーター
    名前 タイプ 説明
    ipAddress 文字列またはオブジェクト 正規化する IP アドレス、またはその IP アドレスを含むスコープ付き IPAddress オブジェクト。
    表 : 3. 返される内容
    タイプ 説明
    文字列 正規化された (短縮/標準化された) IP アドレス。

    次の例は、このメソッドのスコープ対象バージョンを使用して IPv6 IP アドレスを正規化する方法を示しています。

    function() {
      var grCMDB = new GlideRecord('cmdb_ci');
      grCMDB.get("SYS_ID");
      var ip = grCMDB.getValue('ip_address');
      gs.info("ip address: " + ip);
      gs.info("canonicalized ip: " + SNC.IPAddress.canonicalize(ip));
    }

    出力:

    ip address: 0000:0000:0000:0000:0000:0000:0000:0001
    canonicalized ip: ::1

    IPAddress - getExpanded(文字列 ipAddress)

    指定された IP アドレスの展開形式を返します

    たとえば、IPv6 アドレス「::1」の展開形式は「0000:0000:0000:0000:0000:0000:0000:0000:0001」です。IPv4 アドレス「192.268.1.2」の展開形式は「192.168.001.002」です。

    注:
    これは静的な方法です。
    表 : 4. パラメーター
    名前 タイプ 説明
    ipAddress 文字列 展開する IP アドレス。
    表 : 5. 返される内容
    タイプ 説明
    文字列 展開された IP アドレス。

    次の例は、このメソッドのスコープ対象バージョンを使用して IPv6 IP アドレスを拡張する方法を示しています。

    function() {
      var grCMDB = new GlideRecord('cmdb_ci');
      grCMDB.get(SYS_ID);
      var ip = grCMDB.getValue('ip_address');
      gs.info("ip address: " + ip);
      gs.info("expanded ip: " + SNC.IPAddress.getExpanded(ip));
    }

    出力:

    ip address: ::1
    expanded ip: 0000:0000:0000:0000:0000:0000:0000:0001

    IPAddress:isLinkLocal()

    指定された IPAddress オブジェクトがリンクローカル IP アドレスかどうかを決定します。

    リンクローカル IP アドレスの詳細については、 RFC 3927 および RFC 4291 を参照してください。

    注:
    これは非静的メソッドです。
    表 : 6. パラメーター
    名前 タイプ 説明
    なし
    表 : 7. 返される内容
    タイプ 説明
    ブーリアン

    IP アドレスオブジェクトがリンクローカルアドレスであるかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスはリンクローカルアドレスです。
    • false:IP アドレスはリンクローカルアドレスではありません。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスがリンクローカルアドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
    
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + start_ip);
      gs.info("ip address 1 is link local?: " + new SNC.IPAddress(ip).isLinkLocal());
      gs.info("ip address 2 is link local?: " + new SNC.IPAddress(start_ip).isLinkLocal());
    }

    出力:

    ip address 1: ::1
    ip address 2: fe80:1::1
    ip address 1 is link local?: false
    ip address 2 is link local?: true

    IPAddress:isLocalhost()

    指定された IPAddress オブジェクトがループバック IP アドレスかどうかを判定します。

    ループバック IP アドレスの詳細については、「 IANA IPv4 特殊目的アドレスレジストリ 」および「 IANA IPv6 特殊目的アドレスレジストリ」を参照してください。

    注:
    これは非静的メソッドです。
    表 : 8. パラメーター
    名前 タイプ 説明
    なし
    表 : 9. 返される内容
    タイプ 説明
    ブーリアン

    IP アドレスオブジェクトがループバック IP アドレスかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスはループバック IP アドレスです。
    • false:IP アドレスはループバック IP アドレスではありません。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスがループバック IP アドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + start_ip);
      gs.info("ip address 1 is localhost?: " + new SNC.IPAddress(ip).isLocalhost());
      gs.info("ip address 2 is localhost?: " + new SNC.IPAddress(ip2).isLocalhost());
    }

    出力:

    ip address 1: 127.0.0.1
    ip address 2: <current user's public IP Address>
    ip address 1 is localhost?: true
    ip address 2 is localhost?: false

    IPAddress:isMulticast()

    指定された IPAddress オブジェクトがマルチキャスト IP アドレスかどうかを判断します。

    マルチキャスト IP アドレスの詳細については、 RFC 2365 および RFC 3306 を参照してください。

    注:
    これは非静的メソッドです。
    表 : 10. パラメーター
    名前 タイプ 説明
    なし
    表 : 11. 返される内容
    タイプ 説明
    ブーリアン

    IP アドレスオブジェクトがマルチキャストアドレスであるかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスはマルチキャストアドレスです。
    • false:IP アドレスはマルチキャストアドレスではありません。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスがマルチキャストアドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + start_ip);
      gs.info("ip address 1 is multicast?: " + new SNC.IPAddress(ip).isMulticast());
      gs.info("ip address 2 is multicast?: " + new SNC.IPAddress(start_ip).isMulticast());
    }

    出力:

    ip address 1: ::1
    ip address 2: 224.0.0.22
    ip address 1 is multicast?: false
    ip address 2 is multicast?: true

    IPAddress:isPublic()

    指定された IPAddress オブジェクトがパブリック IP アドレスかどうかを判断します。IP アドレスはルーティング可能であり、予約済みアドレスではない場合、パブリックと見なされます。

    注:
    これは非静的メソッドです。
    表 : 12. パラメーター
    名前 タイプ 説明
    なし
    表 : 13. 返される内容
    タイプ 説明
    ブーリアン

    IP アドレスオブジェクトがパブリックアドレスであるかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスはパブリックアドレスです。
    • false:IP アドレスはパブリックアドレスではありません。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスがパブリックアドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var ip2 = gs.getSession().getClientIP().toString();
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + ip2);
      gs.info("ip address 1 is public?: " + new SNC.IPAddress(ip).isPublic());
      gs.info("ip address 2 is public?: " + new SNC.IPAddress(ip2).isPublic());
    }

    出力:

    ip address 1: 2001:1::1
    ip address 2: <current user's public IP Address>
    ip address 1 is public?: false
    ip address 2 is public?: true

    IPAddress:isReserved()

    指定された IPAddress オブジェクトが予約済み IP アドレスかどうかを判断します。

    予約済み IP アドレスの詳細については、「 IANA IPv4 特殊目的アドレスレジストリ 」および「 IANA IPv6 特殊目的アドレスレジストリ」を参照してください。

    注:
    これは非静的メソッドです。
    表 : 14. パラメーター
    名前 タイプ 説明
    なし
    表 : 15. 返される内容
    タイプ 説明
    ブーリアン

    IP アドレスオブジェクトが予約済みアドレスかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスは予約済みアドレスです。
    • false:IP アドレスは予約済みアドレスではありません。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスが予約済みアドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var ip2 = gs.getSession().getClientIP().toString();
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + ip2);
      gs.info("ip address 1 is reserved?: " + new SNC.IPAddress(ip).isReserved());
      gs.info("ip address 2 is reserved?: " + new SNC.IPAddress(ip2).isReserved());
    }

    出力:

    ip address 1: 2001:1::1
    ip address 2: <current user's public IP Address>
    ip address 1 is reserved?: true
    ip address 2 is reserved?: false

    IPAddress:isRoutable()

    指定された IPAddress オブジェクトがルーティング可能な IP アドレスかどうかを判断します。

    IP アドレスは、プライベートアドレス、リンクローカルアドレス、またはループバックアドレスでない場合、ルーティング可能と見なされます。プライベートアドレスの詳細については、 RFC 1918 および RFC 4193 を参照してください。

    注:
    これは非静的メソッドです。
    表 : 16. パラメーター
    名前 タイプ 説明
    なし
    表 : 17. 返される内容
    タイプ 説明
    ブーリアン

    IP アドレスオブジェクトがルーティング可能アドレスかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスはルーティング可能なアドレスです。
    • false:IP アドレスはルーティング可能なアドレスではありません。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスがルーティング可能アドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var ip2 = gs.getSession().getClientIP().toString();
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + ip2);
      gs.info("ip address 1 is routable?: " + new SNC.IPAddress(ip).isRoutable());
      gs.info("ip address 2 is routable?: " + new SNC.IPAddress(ip2).isRoutable());
    }

    出力:

    ip address 1: ::1
    ip address 2: <current user's public IP Address>
    ip address 1 is routable?: false
    ip address 2 is routable?: true

    IPAddress:isSameVersionAs(文字列 ipAddress)

    渡された IPAddress オブジェクトが、指定された IP アドレスと同じバージョン (IPv4 または IPv6) かどうかを判断します。

    注:
    これは非静的メソッドです。
    表 : 18. パラメーター
    名前 タイプ 説明
    ipAddress 文字列 渡された IPAddress オブジェクトの IP アドレスと照合する IP アドレス。
    表 : 19. 返される内容
    タイプ 説明
    ブーリアン

    指定された IP アドレスが IPAddress オブジェクトのバージョンと同じかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスバージョンは同じです。
    • false:IP アドレスバージョンが異なります。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、さまざまな IP アドレスが同じバージョン (IPv4 または IPv6) かどうかを比較する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      var end_ip = grDiscover.getValue('end_ip_address');
      gs.info("ip address 1: "+ ip);
      gs.info("ip address 2: " + start_ip);
      gs.info("ip address 3: " + end_ip);
      var ip1 = new SNC.IPAddress(ip);
      var ip2 = new SNC.IPAddress(start_ip);
      var ip3 = new SNC.IPAddress(end_ip);
      gs.info("ip address 1 is same version as ip address 2?: " + ip1.isSameVersionAs(ip2));
      gs.info("ip address 1 is same version as itself?: " + ip1.isSameVersionAs(ip1));
      gs.info("ip address 2 is same version as ip address 3?: " + ip2.isSameVersionAs(ip3));
    }

    出力:

    ip address 1: 192.168.0.1
    ip address 2: ::2
    ip address 3: ::3
    ip address 1 is same version as ip address 2?: false
    ip address 1 is same version as itself?: true
    ip address 2 is same version as ip address 3?: true

    IPAddress:isUnicast()

    指定された IPAddress オブジェクトがユニキャスト IP アドレスかどうかを判定します。

    ユニキャストアドレスは、事実上、マルチキャストではないアドレスです。

    注:
    これは非静的メソッドです。
    表 : 20. パラメーター
    名前 タイプ 説明
    なし
    表 : 21. 返される内容
    タイプ 説明
    ブーリアン

    IP アドレスオブジェクトがユニキャストアドレスかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスはユニキャストアドレスです。
    • false:IP アドレスはユニキャストアドレスではありません。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスがユニキャストアドレスかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + start_ip);
      gs.info("ip address 1 is unicast?: " + new SNC.IPAddress(ip).isUnicast());
      gs.info("ip address 2 is unicast?: " + new SNC.IPAddress(ip2).isUnicast());
    }

    出力:

    ip address 1: 224.0.0.22
    ip address 2: <current user's public IP Address>
    ip address 1 is unicast?: false
    ip address 2 is unicast?: true

    IPAddress:isV4(文字列 ipAddress)

    指定された IP アドレスが有効な IPv4 アドレスかどうかを判定します。

    このメソッドには、静的実装と非静的実装の両方があります。2 つのメソッド型を呼び出す方法はわずかに異なります。非静的実装の場合、最初に IPAddress オブジェクトをインスタンス化する必要はなく、IPAddress クラス参照で IP アドレスを渡します。どちらも同じ応答を返します。

    表 : 22. パラメーター
    名前 タイプ 説明
    ipAddress 文字列 検証する IP アドレス。

    非静的実装の場合、IP アドレスはメソッド呼び出しではなく IPAddress クラス参照で渡されます。

    たとえば、「 新規 SNC」などです。IPAddress("::1").isV4();です。

    表 : 23. 返される内容
    タイプ 説明
    ブーリアン

    指定された IP アドレスが有効な IPv4 アドレスであるかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスは有効です。
    • false:IP アドレスが無効です。

    次の例は、このメソッドのスコープ対象静的バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスが有効な IPv4 アドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + start_ip);
      gs.info("ip address 1 is v4?: " + SNC.IPAddress.isV4(ip));
      gs.info(("ip address 2 is v4?: " + SNC.IPAddress.isV4(start_ip));
    }

    出力:

    ip address 1: 192.168.0.1
    ip address 2: ::2
    ip address 1 is v4?: true
    ip address 2 is v4?: false

    次の例は、このメソッドの非静的バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスが有効な IPv4 アドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + start_ip);
      gs.info("ip address 1 is v4?: " + new SNC.IPAddress(ip).isV4());
      gs.info("ip address 2 is v4?: " + new SNC.IPAddress(start_ip).isV4());
    }

    出力:

    ip address 1: 192.168.0.1
    ip address 2: ::2
    ip address 1 is v4?: true
    ip address 2 is v4?: false

    IPAddress:isV6(文字列 ipAddress)

    指定された IP アドレスが有効な IPv6 アドレスかどうかを判定します。

    このメソッドには、静的実装と非静的実装の両方があります。2 つのメソッド型を呼び出す方法はわずかに異なります。非静的実装の場合、最初に IPAddress オブジェクトをインスタンス化する必要はなく、IPAddress クラス参照で IP アドレスを渡します。どちらも同じ応答を返します。

    表 : 24. パラメーター
    名前 タイプ 説明
    ipAddress 文字列 検証する IP アドレス。

    非静的実装の場合、IP アドレスはメソッド呼び出しではなく IPAddress クラス参照で渡されます。

    たとえば、「 新規 SNC」などです。IPAddress("::1").isV6();です。

    表 : 25. 返される内容
    タイプ 説明
    ブーリアン

    指定された IP アドレスが有効な IPv6 アドレスであるかどうかを示すフラグ。

    有効な値:
    • true:IP アドレスは有効です。
    • false:IP アドレスが無効です。

    次の例は、このメソッドのスコープ付き静的バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブルのレコード内の IP アドレスが有効な IPv6 アドレスであるかどうかを検証する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get(SYS_ID);
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + start_ip);
      gs.info("ip address 1 is v6?: " + SNC.IPAddress.isV6(ip));
      gs.info(("ip address 2 is v6?: " + SNC.IPAddress.isV6(start_ip));
    }

    出力:

    ip address 1: 192.168.0.1
    ip address 2: ::2
    ip address 1 is v6?: false
    ip address 2 is v6?: true

    次の例は、このメソッドのスコープ対象の非静的バージョンを使用して、ディスカバリー IP 範囲 [discovery_range_item] テーブル内のレコード内の IP アドレスが有効な IPv6 アドレスであるかどうかを確認する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('discovery_range_item');
      grDiscover.get("SYS_ID");
    
      var ip = grDiscover.getValue('network_ip');
      var start_ip = grDiscover.getValue('start_ip_address');
      gs.info("ip address 1: " + ip);
      gs.info("ip address 2: " + start_ip);
    
      gs.info("ip address 1 is v6?: " + new SNC.IPAddress(ip).isV6());
      gs.info("ip address 2 is v6?: " + new SNC.IPAddress(start_ip).isV6());
    
    }

    出力:

    ip address 1: 192.168.0.1
    ip address 2: ::1
    ip address 1 is v6?: false
    ip address 2 is v6?: true

    IPAddress:isValid(文字列 ipAddress)

    指定された IP アドレスが有効な IPv4 アドレスか IPv6 アドレスかを判定します。

    注:
    これは静的な方法です。
    表 : 26. パラメーター
    名前 タイプ 説明
    ipAddress 文字列 検証する IP アドレス。
    表 : 27. 返される内容
    タイプ 説明
    ブーリアン

    指定された IP アドレスが有効な IPv4 アドレスか IPv6 アドレスかを示すフラグ。

    有効な値:
    • true:IP アドレスは有効です。
    • false:IP アドレスが無効です。

    次のコード例は、このメソッドのスコープ対象バージョンを使用して、構成アイテム [cmdb_ci] 内のレコード内の IP アドレスが有効かどうかを確認する方法を示しています。

    function() {
      var grCMDB = new GlideRecord('cmdb_ci');
      grCMDB.get("SYS_ID");
      var ip = grCMDB.getValue('ip_address');
      gs.info("ip address: " + ip)
      var ipAddress = new SNC.IPAddress(ip);
      gs.info("ip is valid?: " + ipAddress.isValid())
    }

    出力:

    ip address: 127.0.0.1
    ip is valid?: true

    IPAddress:toExpanded()

    IPAddress オブジェクトの展開形式を返します。

    注:
    これは非静的メソッドです。
    表 : 28. パラメーター
    名前 タイプ 説明
    なし
    表 : 29. 返される内容
    タイプ 説明
    文字列 展開された IP アドレス。

    次の例は、このメソッドのスコープ対象バージョンを使用して IPv6 IP アドレスを拡張する方法を示しています。

    function() {
      var grDiscover = new GlideRecord('cmdb_ci');
      grDiscover.get("SYS_ID");
      var ip = grDiscover.getValue('ip_address');
      gs.info("ip address: " + ip);
      gs.info("expanded ip address: " + new SNC.IPAddress(ip).toExpanded());
    }

    出力:

    ip address: 2001:41::1
    expanded ip address: 2001:0041:0000:0000:0000:0000:0000:0001