You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从/var/log/auth.log中提取当日的唯一IP地址并生成排序后的列表?

如何从/var/log/auth.log中提取当日的唯一IP地址并生成排序后的列表?

我来给你几个实用的方案,完美解决你提取当日攻击IP的需求,先说说你之前命令行不通的原因:你用冒号:作为awk的分隔符,但日志里的字段是用空格分隔的,所以$14根本定位不到IP,自然出不来正确结果。

下面是几个靠谱的方法:

方法一:自动匹配当日日期,提取唯一IP并排序

这个方法不用手动输入日期,会自动获取系统当天的日期格式,和日志里的格式对齐:

today=$(date +'%b %e')
grep "$today" /var/log/auth.log | grep 'rhost=' | awk '{sub(/.*rhost=/,"",$0); print $1}' | sort -n | uniq

方法二:统计每个IP的攻击次数(按次数降序)

如果想知道哪个IP攻击最频繁、优先处理,可以用这个命令,会显示每个IP的攻击次数并从多到少排序:

today=$(date +'%b %e')
grep "$today" /var/log/auth.log | grep 'rhost=' | awk '{sub(/.*rhost=/,"",$0); print $1}' | sort -n | uniq -c | sort -nr

方法三:简化管道,用awk一步过滤日期和IP

如果觉得管道太多,也可以用awk直接完成日期过滤和IP提取,效率更高一点:

today=$(date +'%b %e')
awk "/$today/ && /rhost=/ {sub(/.*rhost=/,"",\$0); print \$1}" /var/log/auth.log | sort -n | uniq

各部分命令的作用解释:

  • today=$(date +'%b %e'):自动获取当前系统的月份缩写(比如Jun)和日期(个位数日期前面会带空格,和日志格式完全匹配)
  • grep "$today" /var/log/auth.log:筛选出当天的所有日志条目
  • grep 'rhost=':只保留包含远程IP标记rhost=的认证失败记录
  • awk '{sub(/.*rhost=/,"",$0); print $1}':把每行中rhost=之前的内容全部清空,剩下的第一个字段就是我们要的IP地址
  • sort -n:对IP地址进行数字排序,让同段的IP排在一起,看起来更清晰
  • uniq:去除重复的IP,只保留唯一条目;uniq -c会统计每个IP出现的次数,后面加sort -nr就是按次数从高到低排序

这样你就能轻松得到当日所有攻击来源的唯一IP列表,甚至能知道哪个IP攻击最凶,方便你针对性处理~

备注:内容来源于stack exchange,提问作者j0h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:09:32