正则表达式抽取IP地址和端口
ailx10说:这篇是我2024年4月写的。我在关联 Log4j 攻击结果时踩过一个很具体的坑:只看外联 IP,没有把端口一起对,原本失败的场景也被连成了成功。于是这回把提取规则补上目的端口,再用样例看看 IPv4 和可选端口怎样一起抓出来。这篇的出发点不是学一个漂亮正则,而是修一条已经带来误判的分析链。小小一个字段补回来,前后的判断就更能对得上;也正因为它来自一次实际问题,几行代码才有了明确的用处。
原示例仅演示提取格式;它没有完整校验 IPv4 与端口数值范围,也未覆盖 IPv6。发现外联不能单独证明命令执行,私网地址也可能是有效连接目标。
import re
# 示例字符串
text = "192.168.1.1:8080 10.0.0.1 172.16.0.1:7070 192.168.2.1"
# 使用正则表达式提取IP地址和目的端口(如果存在)
pattern = r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::(\d{1,5}))?'
matches = re.findall(pattern, text)
# 打印提取的IP地址和目的端口
for match in matches:
ip, port = match
if port:
print(f"IP地址:{ip},目的端口:{port}")
else:
print(f"IP地址:{ip},没有指定目的端口")
运行结果
IP地址:192.168.1.1,目的端口:8080
IP地址:10.0.0.1,没有指定目的端口
IP地址:172.16.0.1,目的端口:7070
IP地址:192.168.2.1,没有指定目的端口
正则能筛形状,范围和协议还得另验。IPv6、编码和私网回连都可能让简单样例失灵,补字段的同时,也得把还没覆盖的情况记下来。
本文摘要与文字整理有 AI 参与。
========================if i have some wrong, please give me a message, thx.========================
浙公网安备 33010602011771号