当前位置: 首页 > news >正文

SQL-leetcode—3451. 查找无效的 IP 地址

3451. 查找无效的 IP 地址

表:logs

±------------±--------+
| Column Name | Type |
±------------±--------+
| log_id | int |
| ip | varchar |
| status_code | int |
±------------±--------+
log_id 是这张表的唯一主键。
每一行包含服务器访问日志信息,包括 IP 地址和 HTTP 状态码。
编写一个解决方案来查找 无效的 IP 地址。一个 IPv4 地址如果满足以下任何条件之一,则无效:

任何 8 位字节中包含大于 255 的数字
任何 8 位字节中含有 前导零(如 01.02.03.04)
少于或多于 4 个 8 位字节
返回结果表分别以 invalid_count,ip 降序 排序。

结果格式如下所示。

示例:

输入:

logs 表:

±-------±--------------±------------+
| log_id | ip | status_code |
±-------±--------------±------------+
| 1 | 192.168.1.1 | 200 |
| 2 | 256.1.2.3 | 404 |
| 3 | 192.168.001.1 | 200 |
| 4 | 192.168.1.1 | 200 |
| 5 | 192.168.1 | 500 |
| 6 | 256.1.2.3 | 404 |
| 7 | 192.168.001.1 | 200 |
±-------±--------------±------------+
输出:

±--------------±-------------+
| ip | invalid_count|
±--------------±-------------+
| 256.1.2.3 | 2 |
| 192.168.001.1 | 2 |
| 192.168.1 | 1 |
±--------------±-------------+
解释:

256.1.2.3 是无效的,因为 256 > 255
192.168.001.1 是无效的,因为有前导零
192.168.1 是非法的,因为只有 3 个 8 位字节
输出表分别以 invalid_count,ip 降序排序。

题解

先判断 ip 是不是四段的,使用 LENGTH(ip) - LENGTH(REPLACE(ip, ‘.’, ‘’)) + 1 != 4
使用 SUBSTRING_INDEX 嵌套,分割出 ip 的每个段
转换数据类型,可通过 + 0 转换成数值类型,判断是否大于 255
通过 RLIKE 正则表达式判断是不是 0 开头,如果是 0 , ^0[0-9]+ 表示前导 0 后面还有至少一个数字

方法一 拆解判断

SELECTip,COUNT(*) AS invalid_count
FROM logs
WHERELENGTH(ip) - LENGTH(REPLACE(ip, '.', '')) + 1 != 4 ORSUBSTRING_INDEX(ip, '.', 1) + 0 > 255 OR SUBSTRING_INDEX(ip, '.', 1) RLIKE '^0[0-9]+'OR SUBSTRING_INDEX(SUBSTRING_INDEX(ip, '.', 2), '.', -1) + 0 > 255 OR SUBSTRING_INDEX(SUBSTRING_INDEX(ip, '.', 2), '.', -1) RLIKE '^0[0-9]+'OR SUBSTRING_INDEX(SUBSTRING_INDEX(ip, '.', 3), '.', -1) + 0 > 255 OR SUBSTRING_INDEX(SUBSTRING_INDEX(ip, '.', 3), '.', -1) RLIKE '^0[0-9]+'OR SUBSTRING_INDEX(ip, '.', -1) + 0 > 255 OR SUBSTRING_INDEX(ip, '.', -1) RLIKE '^0[0-9]+'
GROUP BY ip
ORDER BY invalid_count DESC, ip DESC

方法二 正则

select t.ip,count(1) invalid_countfrom logs twhere concat(t.ip,'.') not regexp-- 1-9  | 10-99    | 100-199 | 200-249   | 250-255'^(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){4}$'group by t.iporder by invalid_count desc,t.ip desc
http://www.dtcms.com/a/342560.html

相关文章:

  • centos常用命令
  • Visual Studio Code (VS Code) 工作区配置文件的作用
  • CentOS7安装部署NexusRepository
  • 【Spring Cloud 微服务】2.守护神网关Gateway
  • 告别人工建模:AI 自动化 ETL 工具对比,数据 pipeline 搭建时间缩短 60% 的实践
  • 洛谷 P2656 采蘑菇-普及+/提高
  • k 均值聚类算法总结
  • 从入门到精通:Java设计模式——单例模式
  • 8.21IPSEC安全基础后篇,IKE工作过程
  • 【TWT】
  • 常德二院信创转型实战:全栈国产化提升医疗效率与安全
  • 嵌入式linux设备升级和sm32升级对比
  • 计算机视觉(opencv)实战六——图像形态学(腐蚀、膨胀、开运算、闭运算、梯度、顶帽、黑帽)
  • el-table-draggable拖拽实现表格内容排序
  • VUE从入门到精通二:ref、reactive、computed计算属性、watch监听、组件之间的通信
  • 网络与信息安全有哪些岗位:(5)安全开发工程师
  • Android14内核调试 - boot vendor_boot
  • Git常用操作大全(附git操作命令)
  • Matplotlib数据可视化实战:Matplotlib数据可视化入门与实践
  • golang实现的Rsa加密解密算法(go和java交互时双向加解密方案)
  • OpenCV 形态学操作详解:腐蚀、膨胀与开闭运算
  • Chrome/360 浏览器 WebUI 资源底层机制解析:共享资源与专属资源的奥秘
  • 一、部署LNMP
  • mac的m3芯片安装JDK8、JDK17
  • 【CDA干货】金融App产品AB测试与指标体系搭建
  • 数据结构之排序大全(3)
  • 31、工业网络异常行为检测与OT协议深度分析 (核电站DCS模拟) - /安全与维护组件/network-anomaly-detection-nuclear
  • “码” 上安全:轻量级加密的硬件实现与侧信道攻击防御
  • Java实现一个简单的LRU缓存对象
  • 【SpringBoot】16 核心功能 - Web开发原理 - 请求参数 - 源码分析