如何在Athena中检查目标IP是否属于指定CIDR网段?
Athena筛选指定/26 CIDR网段的可行方案
方法一:IP转整数判断范围
把IP地址转换为32位整数,直接判断是否落在目标网段的整数区间内,精准度高。
目标网段3.250.243.64/26的IP范围是3.250.243.64到3.250.243.127,对应的整数分别是543950848和543950911,直接用BETWEEN筛选:
SELECT * FROM "default"."test3" WHERE inet_aton(dstaddr) BETWEEN 543950848 AND 543950911;
inet_aton函数负责将字符串格式的IP转换为整数,Athena原生支持这个Presto函数
方法二:用CIDR专属函数匹配
如果你的Athena版本支持cidr_contains函数,直接用它更直观,需要把字段和网段分别转为inet和cidr类型:
SELECT * FROM "default"."test3" WHERE cidr_contains(cast('3.250.243.64/26' AS cidr), cast(dstaddr AS inet));
如果之前用这个函数失败,大概率是没做类型转换——必须确保dstaddr被转为inet类型,网段转为cidr类型
额外注意
如果dstaddr字段存在非IP格式的内容,建议先过滤避免转换错误:
SELECT * FROM "default"."test3" WHERE dstaddr REGEXP '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' AND inet_aton(dstaddr) BETWEEN 543950848 AND 543950911;
内容的提问来源于stack exchange,提问作者DenCowboy
相关产品推荐
相关产品推荐

