このトピックでは、IPアドレス解析関数の構文とパラメーターについて説明します。 このトピックでは、関数の使用方法の例も示します。
関数
機能 | 説明 |
IPアドレスに基づいて、市、州、国を識別します。 | |
IPアドレスがCIDR (Classless Inter-Domain Routing) ブロックに属しているかどうかをチェックします。 | |
ChecksかどうかバージョンのIPアドレスはIPv4またはIPv6. | |
IdentifiesタイプのIPアドレスとチェックの種類かどうかIPアドレスはプライベートまたはパブリック。 | |
ConvertsをIPアドレスにCIDRブロック。 | |
ConvertsフォーマットのCIDRブロックに形式netmaskまたはプレフィックス長さ指定のCIDRブロック。 | |
2つのCIDRブロックが重複するかどうかをチェックします。 | |
IPアドレスをlong型の値に変換します。 | |
long型の値をIPアドレスに変換します。 |
geo_parse
geo_parse関数は、IPアドレスに基づいて市、州、国を識別するために使用されます。
構文
geo_parse(ip, ip_db="SLS-GeoIP", keep_fields=None, provider="ipip", ip_sep=None)
パラメーター
パラメーター
データ型
必須/任意
説明
ip
String
必須
IPアドレスが属する都市、省、および国を取得するために解析するIPアドレス。 複数のIPアドレスを入力する場合は、ip_sepパラメーターを使用して区切り文字を指定できます。
ip_db
String
必須
IPアドレスを、そのIPアドレスが属する都市、省、および国に解析するために使用されるIPアドレスデータベース。 有効な値:
SLS-GeoIP: Log Serviceの組み込みIPアドレスデータベース。 デフォルト値です。 正確性を確保するため、Log Serviceの組み込みIPアドレスデータベースは1日1回更新されます。 追加の構成を必要とせずにデータベースを使用できます。
カスタムIPアドレスデータベース: 値を
res_oss_file(endpoint, ak_id, ak_key, bucket, file, format='binary', change_detect_interval=0,fetch_interval=2,refresh_retry_max=60,encoding='utf8',error='ignore')
に設定します。 res_oss_file関数のパラメーターの詳細については、「res_oss_file」をご参照ください。
keep_fields
Tuple
任意
レスポンスに含まれるキー。
組み込みのIPアドレスデータベースを使用してIPアドレスを解析する場合、デフォルトで次のキーがレスポンスに含まれます。
city: 都市の名前
州: 州の名前
国: 国の名前
city_en: 行政区コードまたは市の名前
province_en: 行政区コードまたは州の名前
country_en: 国または地域のコードまたは名前
isp: インターネットサービスプロバイダー (ISP) の名前
lat: IPアドレスが属する場所の緯度
lon: IPアドレスが属する場所の経度
カスタムIPアドレスデータベースを使用してIPアドレスを解析する場合、デフォルトで次のキーがレスポンスに含まれます。
市: 名の市
州: 州の名前
国: 国の名前
For例、
keep_fields=(「都市」、"国")
示しが市
と国
キーはreturned.The
維持_分野
パラメータの名前に使用することがキー。 たとえば、(("city","cty"),("country","state"))
は、返された結果で都市キーと国キーの名前がcty
とstate
に変更されることを示します。プロバイダー
String
任意
このパラメーターは、ip_dbパラメーターがカスタムipアドレスデータベースに設定されている場合にのみ有効です。 有効な値:
ipip: IPIPによってIPDB形式で提供されるバイナリIPアドレスデータベースは、IPアドレスを解析するために使用されます。 データベースをダウンロードするには、 ipipにアクセスしてください。 デフォルト値です。
ip2location: IP2Locationによって提供されるグローバルバイナリIPアドレスデータベースは、IPアドレスを解析するために使用されます。 データベースをダウンロードするには、ip2locationにアクセスしてください。 バイナリIPアドレスデータベースのみがサポートされています。
ip_sep
String
任意
IPアドレス区切り文字。 区切り文字は、IPアドレスの文字列を複数のIPアドレスに区切るために使用されます。 レスポンスはJSON形式です。 デフォルト値 : なし。 この値は、IPアドレスの文字列が区切られないことを指定します。
レスポンス
ディクショナリは次の形式で返されます。
{ "city": "...", "province":"...", "country": "..." }
例
例1: Log Serviceの組み込みIPアドレスデータベースを使用してデータを照会します。
Raw log:
ip : 203.0.113.1
変換ルール:
e_set("geo", geo_parse(v("ip")))
結果:
ip : 203.0.113.1 geo: {"city":"Hangzhou","province":"Zhejiang province","country":"China","isp":"China Mobile","lat":30.16,"lon":120.12}
例2: Log Serviceの組み込みIPアドレスデータベースを使用してデータを照会します。 この関数は、複数のIPアドレスを含むログフィールドを解析し、各IPアドレスが属する都市、州、および国を返します。
Raw log:
ip : 203.0.113.4, 192.0.2.2, 198.51.100.2
変換ルール:
e_set("geo", geo_parse(v("ip"), ip_sep=","))
結果:
ip : 203.0.113.4, 192.0.2.2, 198.51.100.2 geo : {"203.0.113.4": {"country_en": "CN", "province_en": "330000", "city_en": "330200", "country": "China", "province": "Zhejiang province", "city": "Ningbo", "isp": "China Telecom", "lat": 29.8782, "lon": 121.549}, "192.0.2.2": {"country_en": "CN", "province_en": "320000", "city_en": "321300", "country": "China", "province": "Jiangsu province", "city": "Suqian", "isp": "China Telecom", "lat": 33.9492, "lon": 118.296}, "198.51.100.2": {"country_en": "CN", "province_en": "330000", "city_en": "330500", "country": "China", "province": "Zhejiang province", "city": "Huzhou", "isp": "China Telecom", "lat": 30.8703, "lon": 120.093}}
例3: カスタムIPアドレスデータベースを使用してデータを照会します。
Raw log:
ip : 203.0.113.1
変換ルール:
e_set("geo",geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com', ak_id='your ak_id', ak_key='your ak_key', bucket='your bucket', file='ipipfree.ipdb', format='binary',change_detect_interval=20)))
結果:
ip : 203.0.113.1 geo : {"city": "Hangzhou", "province":"Zhejiang province","country": "China"}
例4: カスタムIPアドレスデータベースを使用してデータを照会します。 関数は指定されたキーを返し、キーの名前を変更します。
Raw log:
ip : 203.0.113.1
変換ルール:
e_set("geo",geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com', ak_id='your ak_id', ak_key='your ak_key', bucket='your bucket', file='ipipfree.ipdb', format='binary',change_detect_interval=20),keep_fields=(("city","cty"),("country","state"),("province","pro"))))
結果:
ip : 203.0.113.1 geo : { "state": "China","pro": "Zhejiang province","cty": "Hangzhou"}
例5: カスタムIPアドレスデータベースを使用してデータを照会します。 関数は指定されたキーを返します。
Raw log:
ip : 203.0.113.1
変換ルール:
e_set("geo",geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com', ak_id='your ak_id', ak_key='your ak_key', bucket='your bucket', file='ipipfree.ipdb', format='binary',change_detect_interval=20),keep_fields=("country","province")))
結果:
ip : 203.0.113.1 geo : { "country": "China","province": "Zhejiang province"}
例6: カスタムIPアドレスデータベースを使用してデータを照会し、IP2Locationが提供するグローバルバイナリIPアドレスデータベースを使用してデータを解析します。 関数は指定されたキーを返します。
Raw log:
ip : 203.0.113.2
変換ルール:
e_set("geo", geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com',ak_id="your ak_id", ak_key="your ak_secret", bucket='log-etl-staging', file='your ip2location bin file', format='binary', change_detect_interval=20),provider="ip2location"))
結果:
ip : 203.0.113.2 geo : {"city":"Dearborn","province":"Michigan","country":"United States"}
プロバイダーパラメーターの値をip2locationに設定すると、IP2Locationで提供されるPython用のオープンソースSDKがデータ変換に使用されます。 The SDKためPython IP2Location提供された解析に使用することができる次のフィールド。 フィールドの解析に失敗した場合は、そのフィールドがIP2Locationによって提供されるIPアドレスデータベースに含まれているかどうかを確認する必要があります。
country_short country_long / The country field is specified for data transformation. region / The province field is specified for data transformation. city isp latitude longitude domain zipcode timezone netspeed idd_code area_code weather_code weather_name mcc mnc mobile_brand elevation usage_type
詳細については、IP2Location Python SDKをご参照ください。
例7: カスタムIPアドレスデータベースを使用してデータを照会します。 この関数は、複数のIPアドレスを含むログフィールドを解析し、各IPアドレスが属する都市、州、および国を返します。
Raw log:
ip : 203.0.113.3, 192.0.2.1, 198.51.100.1
変換ルール:
e_set("geo", geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com', ak_id="ak_id", ak_key="ak_secret", bucket='log-etl-staging', file='calendar.csv/IP2LOCATION-LITE-DB3.BIN', format='binary', change_detect_interval=20), provider="ip2location", ip_sep=","))
結果:
ip : 203.0.113.3, 192.0.2.1, 198.51.100.1 geo : {"203.0.113.3": {"city": "Dearborn", "province": "Michigan", "country": "United States"}, "192.0.2.1": {"city": "Hangzhou", "province": "Zhejiang", "country": "China"}, "198.51.100.1": {"city": "Hangzhou", "province": "Zhejiang", "country": "China"}}
ip_cidrmatch
ip_cidrmatch関数は、IPアドレスが指定されたCIDRサブネットと一致するかどうかに基づいてブール値を返すために使用されます。 この関数は、IPアドレスがCIDRブロックに属するかどうかをチェックします。 IPアドレスがCIDRブロックに属している場合、関数はtrueを返します。 それ以外の場合、関数はfalseを返します。 IPアドレスは、IPv4アドレスまたはIPv6アドレスとすることができる。
構文
ip_cidrmatch(cidr_subnet, ip, default="")
パラメーター
パラメーター
データ型
必須/任意
説明
cidr_subnet
String
必須
CIDR ブロックを示します。 例: 192.168.1.0/24。
ip
String
必須
IP アドレス。
default
String
任意
IPアドレスがCIDRブロックに属していない場合、このパラメーターの値が返されます。 このパラメーターは空のままにできます。
レスポンス
指定されたIPアドレスが指定されたCIDRブロックに属する場合、関数はtrueを返します。 それ以外の場合、関数はfalseを返します。
例
例1: 指定されたIPv4アドレスは、指定されたCIDRブロックに属します。 関数はtrueを返します。
Raw log:
cidr_subnet: 192.168.1.0/24 ip: 192.168.1.100
変換ルール:
e_set("is_belong",ip_cidrmatch(v("cidr_subnet"),v("ip")))
結果:
cidr_subnet: 192.168.1.0/24 ip: 192.168.1.100 is_belong: true
例2: 指定されたIPv4アドレスは、指定されたCIDRブロックに属していません。 関数はfalseを返します。
Raw log:
cidr_subnet: 192.168.1.0/24 ip: 10.10.1.100
変換ルール:
e_set("is_belong",ip_cidrmatch(v("cidr_subnet"),v("ip")))
結果:
cidr_subnet: 192.168.1.0/24 ip: 10.10.1.100 is_belong: false
例3: この関数は、指定されたIPアドレスが指定されたCIDRブロックに属しているかどうかを判断できず、unknownを返します。
Raw log:
cidr_subnet: 192.168.1.0/24 ip: a
変換ルール:
e_set("is_belong",ip_cidrmatch(v("cidr_subnet"),v("ip"),default="unknown"))
結果:
cidr_subnet: 192.168.1.0/24 ip: a is_belong: unknown
ip_version
ip_version関数は、IPアドレスのバージョンがIPv4かIPv6かを確認するために使用されます。 IPアドレスのバージョンがIPv4の場合、関数はIPv4を返します。 IPアドレスのバージョンがIPv6の場合、関数はIPv6を返します。
構文
ip_version(ip, default="")
パラメーター
パラメーター
データ型
必須/任意
説明
ip
String
必須
IP アドレス。
default
String
任意
指定されたIPアドレスのバージョンが特定されない場合、このパラメーターの値が返されます。 このパラメーターは空のままにできます。
レスポンス
IPv6またはIPv4が返されます。
例
例1: 指定されたIPアドレスはIPv4アドレスです。 この関数はIPv4を返します。
Raw log:
ip: 192.168.1.100
変換ルール:
e_set("version",ip_version(v("ip")))
結果:
ip: 192.168.1.100 version: IPv4
Example 2: The指定IPアドレスはIPv6アドレス。 この関数はIPv6を返します。
Raw log:
ip: ::1
変換ルール:
e_set("version",ip_version(v("ip")))
結果:
ip: ::1 version: IPv6
ip_type
ip_type関数は、IPアドレスのタイプを識別し、IPアドレスのタイプがプライベートかパブリックかを確認するために使用されます。 有効な値: private、reserved、loopback、public、および割り当て済みのncc。
構文
ip_type(ip, default="")
パラメーター
パラメーター
データ型
必須/任意
説明
ip
String
必須
IP アドレス。
default
String
任意
指定されたIPアドレスのタイプが特定されない場合、このパラメーターの値が返されます。 このパラメーターは空のままにできます。
レスポンス
IPアドレスのタイプを示す値が返されます。 有効な値: private、reserved、loopback、public、および割り当て済みのncc。
例
例1: 指定されたIPアドレスのタイプを識別します。 この関数はループバックを返します。
Raw log:
ip: 127.0.0.1
変換ルール:
e_set("type",ip_type(v("ip")))
結果:
ip: 127.0.0.1 type: loopback
例2: 指定されたIPアドレスのタイプを識別します。 関数はprivateを返します。
Raw log:
ip: 47.100.XX.XX
変換ルール:
e_set("type",ip_type(v("ip")))
結果:
ip: 47.100.XX.XX type: private
例3: 指定されたIPアドレスのタイプを識別します。 関数はpublicを返します。
Raw log:
ip: 47.100.XX.XX
変換ルール:
e_set("type",ip_type(v("ip")))
結果:
ip: 47.100.XX.XX type: public
例4: 指定されたIPv6アドレスのタイプを識別します。 この関数はループバックを返します。
Raw log:
ip: ::1
変換ルール:
e_set("type",ip_type(v("ip")))
結果:
ip: ::1 type: loopback
例5: 指定されたIPv6アドレスのタイプを識別します。 この関数は、割り当て済みのnccを返します。
Raw log:
ip: 2001:0658:022a:cafe:0200::1
変換ルール:
e_set("type",ip_type(v("ip")))
結果:
ip: 2001:0658:022a:cafe:0200::1 type: allocated ripe ncc
ip_makenet
The ip_makenet機能を変換するために使用IPアドレスにCIDRブロック。
構文
ip_makenet(ip, subnet_mask=None, default="")
パラメーター
パラメーター
データ型
必須/任意
説明
ip
String
必須
IP アドレス。
subnet_mask
String
必須
Theサブネットマスク。 例: 255.255.255.0。
説明ipパラメーターをIPアドレス範囲に設定した場合、subnet_maskパラメーターを空のままにすることができます。
default
String
任意
指定されたIPアドレスをCIDRブロックに変換できない場合、このパラメーターの値が返されます。 このパラメーターは空のままにできます。
レスポンス
A CIDRブロックはreturned.
例
例1: IPアドレスをCIDRブロックに変換します。
Raw log:
ip: 192.168.1.0
変換ルール:
e_set("makenet",ip_makenet(v("ip"),"255.255.255.0"))
結果:
ip: 192.168.1.0 makenet: 192.168.1.0/24
例2: IPアドレス範囲をCIDRブロックに変換します。
Raw log:
ip: 192.168.1.0-192.168.1.255
変換ルール:
e_set("makenet",ip_makenet(v("ip")))
結果:
ip: 192.168.1.0-192.168.1.255 makenet: 192.168.1.0/24
例3: IPアドレス範囲をCIDRブロックに変換します。
Raw log:
ip: 192.168.1.0/255.255.255.0
変換ルール:
e_set("makenet",ip_makenet(v("ip")))
結果:
ip: 192.168.1.0/255.255.255.0 makenet: 192.168.1.0/24
ip_to_format
ip_to_format関数は、CIDRブロックの形式を、CIDRブロックのネットマスクまたはプレフィックス長を指定する形式に変換するために使用されます。
構文
ip_to_format(cidr_subnet, want_prefix_len=0, default="")
パラメーター
パラメーター
データ型
必須/任意
説明
cidr_subnet
String
必須
CIDR ブロックを示します。 例: 192.168.1.0/24。
want_prefix_len
Int
任意
出力CIDRブロックの形式。 デフォルト値:0 有効な値:
0: 元のCIDRブロックを返します。
1: IPアドレスとIPアドレスのプレフィックス長を返します。
2: IPアドレスとIPアドレスのネットマスクを返します。
3: IPアドレス範囲を返します。
default
String
任意
指定されたCIDRブロックの形式を指定された形式に変換できない場合、このパラメーターの値が返されます。 このパラメーターは空のままにできます。
レスポンス
指定された形式のCIDRブロックが返されます。
例
例1: CIDRブロックの形式は変換されません。
Raw log:
ip: 192.168.1.0/24
変換ルール:
e_set("strNormal",ip_to_format(v("ip"),0))
結果:
ip: 192.168.1.0/24 strNormal: 192.168.1.0/24
例2: CIDRブロックの形式を、CIDRブロックのプレフィックス長を指定する形式に変換します。
Raw log:
ip: 192.168.1.0/24
変換ルール:
e_set("strNormal",ip_to_format(v("ip"),1))
結果:
ip: 192.168.1.0/24 strNormal: 192.168.1.0/24
例3: CIDRブロックの形式を、CIDRブロックのネットマスクを指定する形式に変換します。
Raw log:
ip: 192.168.1.0/24
変換ルール:
e_set("strNormal",ip_to_format(v("ip"),2))
結果:
ip: 192.168.1.0/24 strNormal: 192.168.1.0/255.255.255.0
例4: CIDRブロックをIPアドレス範囲に変換します。
Raw log:
ip: 192.168.1.0/24
変換ルール:
e_set("strNormal",ip_to_format(v("ip"),3))
結果:
ip: 192.168.1.0/24 strNormal: 192.168.1.0-192.168.1.255
ip_overlaws
ip_overlaws関数は、2つのCIDRブロックが重複するかどうかを確認します。
構文
ip_overlaws (cidr_subnet, cidr_subnet2, default="")
パラメーター
パラメーター
データ型
必須/任意
説明
cidr_subnet
String
必須
最初のCIDRブロック。
cidr_subnet2
String
必須
2番目のCIDRブロック。
default
String
任意
関数がCIDRブロックが重複するかどうかを判断できない場合、このパラメーターの値が返されます。 このパラメーターは空のままにできます。
レスポンス
指定されたCIDRブロックが重複しない場合、関数は0を返します。
指定されたCIDRブロックがブロックの最後で重複する場合、関数は1を返します。
指定されたCIDRブロックがブロックの先頭で重複する場合、関数は-1を返します。
例
例1: 指定された2つのCIDRブロックは重複しません。
Raw log:
cidr1: 192.168.0.0/23 cidr2: 192.168.2.0/24
変換ルール:
e_set("overlaps",ip_overlaps(v("cidr1"),v("cidr2")))
結果:
cidr1: 192.168.0.0/23 cidr2: 192.168.2.0/24 overlaps: 0
例2: 指定された2つのCIDRブロックは、ブロックの先頭で重複しています。
Raw log:
cidr1: 192.168.1.0/24 cidr2: 192.168.0.0/23
変換ルール:
e_set("overlaps",ip_overlaps(v("cidr1"),v("cidr2")))
結果:
cidr1: 192.168.1.0/24 cidr2: 192.168.0.0/23 overlaps: -1
例3: 指定された2つのCIDRブロックは、ブロックの最後で重複しています。
Raw log:
cidr1: 192.168.0.0/23 cidr2: 192.168.1.0/24
変換ルール:
e_set("overlaps",ip_overlaps(v("cidr1"),v("cidr2")))
結果:
cidr1: 192.168.0.0/23 cidr2: 192.168.1.0/24 overlaps: 1
ip2long
ip2long関数は、IPアドレスをlong型の値に変換するために使用されます。
構文
ip2long(value,default=0)
パラメーター
パラメーター
データ型
必須/任意
説明
value
String
必須
変換する値。The value that you want to convert.
default
String
任意
無効なIPアドレスから変換された値。 カスタム値を使用できます。 例: 0
レスポンス
有効なIPアドレスから変換された値が返されます。 値はlong型です。
例
例1: 有効なIPアドレスを変換します。 これはデフォルトのシナリオです。
Raw log:
ip: 192.168.0.100
変換ルール:
e_set("long_ip",ip2long(v("ip")))
結果:
ip: 192.168.0.100 long_ip: 167772160
Example 2: Convert無効なIPアドレス。
Raw log:
ip: 47.100.XX.XX
変換ルール:
e_set("long_ip",ip2long(v("ip"), "ignore"))
結果:
ip:47.100.XX.XX long_ip:ignore
long2ip
long2ip関数は、long型の値をIPアドレスに変換するために使用されます。
構文
long2ip(value,default="")
パラメーター
パラメーター
データ型
必須/任意
説明
value
String
必須
変換する値。The value that you want to convert.
default
String
任意
long型の無効な値から変換された空の文字列。 カスタム文字列を使用できます。
レスポンス
long型の有効な値から変換されたIPアドレスが返されます。
例
例1: long型の有効な値を変換します。 これはデフォルトのシナリオです。
Raw log:
long: 167772160
変換ルール:
e_set("ip",long2ip(v("long")))
結果:
long: 167772160 ip: 192.168.0.100
例2: long型の無効な値を変換します。
Raw log:
long: 4294967296
変換ルール:
e_set("ip",long2ip(v("long")))
結果:
long: 4294967296 ip:
例3: long型の無効な値を変換し、デフォルトパラメーターをカスタム文字列に設定します。
Raw log:
long: 4294967296
変換ルール:
e_set("ip",long2ip(v("long"),default="xxx"))
結果:
long: 4294967296 ip: xxx